Multiplying two polynomials is similar to multiplying two numbers: for each term in the first polynomial, multiply it by each term in the second, and sum coefficients for like powers.
Assume each polynomial is represented as a list of [coefficient, power] pairs. For each pair in poly1, multiply by each pair in poly2, sum coefficients for matching powers using a map/dictionary, and return the result as a list of [coefficient, power] pairs sorted by descending power.
vector<vector<int>> multiplyPoly(vector<vector<int>>& poly1, vector<vector<int>>& poly2) {
unordered_map<int, int> coeffs;
for (auto& a : poly1) {
for (auto& b : poly2) {
int coef = a[0] * b[0];
int pow = a[1] + b[1];
coeffs[pow] += coef;
}
}
vector<vector<int>> res;
for (auto& [pow, coef] : coeffs) {
if (coef !=0) res.push_back({coef, pow});
}
sort(res.begin(), res.end(), [](auto& x, auto& y){ return x[1] > y[1]; });
return res;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public List<List<Integer>>multiplyPoly(List<List<Integer>> poly1, List<List<Integer>> poly2) {
Map<Integer, Integer> coeffs =new HashMap<>();
for (List<Integer> a : poly1) {
for (List<Integer> b : poly2) {
int coef = a.get(0) * b.get(0);
int pow = a.get(1) + b.get(1);
coeffs.put(pow, coeffs.getOrDefault(pow, 0) + coef);
}
}
List<List<Integer>> res =new ArrayList<>();
for (int pow : coeffs.keySet()) {
int coef = coeffs.get(pow);
if (coef != 0) res.add(Arrays.asList(coef, pow));
}
res.sort((x, y) -> y.get(1) - x.get(1));
return res;
}
1
2
3
4
5
6
7
8
9
10
11
defmultiplyPoly(poly1, poly2):
from collections import defaultdict
coeffs = defaultdict(int)
for a in poly1:
for b in poly2:
coef = a[0] * b[0]
pow = a[1] + b[1]
coeffs[pow] += coef
res = [[coef, pow] for pow, coef in coeffs.items() if coef !=0]
res.sort(key=lambda x: -x[1])
return res