构建乘积数组
给定一个数组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[0] = A[1] * A[2] * … * A[n-1],B[n-1] = A[0] * A[1] * … * A[n-2];)
B中每个元素为A去掉B下标的元素相乘。
class Solution {
public:
vector<int> multiply(const vector<int>& A) {
vector<int> B(A.size(), 1), C(A.size(), 1),D(A.size(), 1);
if (A.empty()) return B;
//第一步 算出C数组(左下角)大小
for (int i = 1; i < A.size(); i++) {//从1开始递增
C[i] = A[i - 1] * C[i - 1];
}
//第二步 算出D数组(右上角)大小
for (int i = A.size() - 2; i >= 0; i--) {//注!!这里是i--//从倒数第一行开始递减即A.size() - 2
D[i] = A[i + 1] * D[i + 1];
}
//第三步 算出B数组大小
for (int i = 0; i < A.size(); i++) {
B[i] = C[i] * D[i];
}
return B;
}
};