题目描述
给定一个数组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]。不能使用除法。
思路:
B0: A1 A2。。。。。。An-1
B1:A0 A2。。。。。。An-1
B2:A0 A1 。。。。。 An-1
。。。。。。。。。。。。。。An-1
Bn-1:A0 。。。。。。An-2
先求下三角,在求上三角,时间复杂度O(n);
代码:
class Solution {
public:
vector<int> multiply(const vector<int>& a) {
vector<int>b;
int n=a.size();
b.push_back(1);
for(int i=1;i<n;i++)//先求下三角
b.push_back(b[i-1]*a[i-1]);
int r=a[n-1];
for(int i=n-2;i>=0;i--){//在求上三角
b[i]*=r;
r*=a[i];
}
return b;
}
};