题目描述
给定一个数组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]。不能使用除法。
class Solution {
public:
vector<int> multiply(const vector<int>& A) {
int len = A.size();
vector<int> B(len);
if (len == 0){
return B;
}
vector<int> C(len);
vector<int> D(len);
C[0] = 1;
for (int i = 1; i < len; i++){
C[i] = A[i-1] * C[i - 1];
}
D[len - 1] = 1;
for (int i= len - 2; i >= 0; i--){
D[i] = A[i+1] * D[i + 1];
}
for (int i = 0; i < len; i++){
B[i] = C[i] * D[i];
}
return B;
}
};
其实两个额外的数组可以省略
class Solution {
public:
vector<int> multiply(const vector<int>& A) {
int len = A.size();
vector<int> B(len);
if (len == 0){
return B;
}
B[0] = 1;
for (int i = 1; i < len; i++){
B[i] = A[i - 1] * B[i - 1];
}
int tmp = 1;
for (int i = len - 2; i >= 0; i--){
tmp *= A[i + 1];
B[i] *= tmp;
}
return B;
}
};