题目描述
给定一个数组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]。不能使用除法。
思路
/**
* 思路:剑指的思路,可以观察B和A的规律
B0 = 1 A1 A2 ... A(n-1)
B1 = A0 1 A2 ... A(n-1)
B2 = A0 A1 1 ... A(n-1)
...
B(n-1) = A0 A1 A2 ... 1
* 由1连成的对角线把矩阵分成了上三角和下三角,可以根据规律先把下三角算出来,然后再对称得出完整的B
*/
class Solution {
public:
vector<int> multiply(const vector<int>& A) {
int len = A.size();
if(len == 0) return A;
vector<int> B;
//计算下三角形
B.push_back(1);
for(int i = 1; i < len; i++){
B.push_back(B[i-1] * A[i-1]);
}
//合并上三角形
int temp = 1;
for(int i = len-2; i >= 0; i--){
temp *= A[i+1];
B[i] *= temp;
}
return B;
}
};