题目描述
给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…A[i-1]*A[i+1]…*A[n-1]。不能使用除法。
思路:
类似于动态规划
用两个数组保存
v1中v1[i]保存前i-1个数的乘积
v1[0]=1
然后从前往后遍历v[i]=v[i-1]*A[i]
v2中v2[i]保存后面i+1到n个数的乘积
v2[n-1]=1
然后从后往前遍历v2[i]=v2[i+1]*A[i]
最后v1 v2对应数字相乘就可以了
class Solution {
public:
vector<int> multiply(const vector<int>& A) {
if(A.size()==0){
return A;
}
vector<int> v1,v2;
v1.push_back(1);
v2.push_back(1);
for(int i=1;i<A.size();i++){
v1.push_back(v1[i-1]*A[i-1]);
}
for(int i=A.size()-2;i>=0;i--){
v2.insert(v2.begin(),v2[0]*A[i+1]);
}
for(int i=0;i<A.size();i++){
v1[i]*=v2[i];
}
return v1;
}
};