剑指offer 051、构建乘积数组
题目
题解
先算下三角中的连乘,即我们先算出B[i]中的一部分,然后倒过来按上三角中的分布规律,把另一部分也乘进去。
class Solution {
public:
vector<int> multiply(const vector<int>& A) {
int length = A.size();
if (length == 1) return vector<int>();
vector<int> B(length, 0);
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;
}
};