题目:
给定一个数组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]。不能使用除法。
链接:
剑指Offer(第2版):P314
思路标签:
- 分段进行
解答:
- 我们可以定义素C[i]=A[0]xA[1]x…xA[i-1];D[i] = A[i+1]x…xA[n-1];
- C[i]可以自上到下计算:C[i] = C[i-1]xA[i-1];
- D[i]可以自下到上计算:D[i] = D[i+1]xA[i+1];
- 这里为了保证B可以直接在程序中索引,将A的值先赋给B,所以B和A有相同长度;
- 同时注意不满足条件时需要返回一个空数组。
class Solution {
public:
vector<int> multiply(const vector<int>& A) {
vector<int> B(A);
int length = A.size();
if (length <= 1) {
vector<int> B;
return B;
}
else{
B[0] = 1;
for (int i = 1; i < length; ++i) {
B[i] = B[i - 1] * A[i - 1];
}
int temp = 1;
for(int i = length - 2; i >= 0; --i) {
temp *= A[i + 1];
B[i] *= temp;
}
}
return B;
}
};