不能用除法,一种方法就是从0遍历到n-1,计算每个B[i],O(n^2)的时间复杂度。另一种方法
B[i]可以看做第i行的乘积,也就是A数组的0到i-1相乘 * A数组的i+1到n-1相乘。根据推导可以得B[i]的前一半 = B[i-1]*A[i-1],B[I]的后一半 = B[i+1]*A[i+1],将这两半的结果分别计算再相乘即可。左右分开算时,左右的首尾都先设为1,从第二位开始计算
class Solution {
public:
vector<int> multiply(const vector<int>& A) {
vector<int> B;
if(A.size() <= 1) return B;
B.resize(A.size());
B[0] = 1;
for(int i = 1; i < A.size(); ++i){
B[i] = B[i-1] * A[i-1];
}
int tmp = 1;
for(int i = A.size()-2; i >= 0; --i){
tmp = tmp * A[i+1];
B[i] = B[i] * tmp ;
}
return B;
}
};