构建乘积数组

你快乐吗?

Posted by bbkgl on September 26, 2019

构建乘积数组

C++,类似于动态规划应该。

利用两个数组,记录每一个位置之前所有元素的乘积和之后所有元素的乘积。

而本题要求的正是每个元素除了自己以外所有元素的乘积,将之前和之后相乘就行了。

但实际上,这两个数组是多余的,只要用返回答案的数组来记录就行了。第一遍遍历可以得到每个元素之前所有元素的乘积,第二遍从后往前遍历,记录每个元素之后的所有元素的乘积,如果直接乘会覆盖,所有定义一个临时变量记录之前遍历的一个就行。

class Solution {
public:
    vector<int> multiply(const vector<int>& A) {
        vector<int> ans(A.size(), 1);
        if (ans.empty()) return ans;
        for (int i = 1; i < ans.size(); i++) 
            ans[i] = ans[i-1] * A[i - 1];
        int temp = 1;
        for (int i = ans.size() - 1; i >= 1; i--) {
            ans[i] = temp * ans[i];
            temp *= A[i];
        }
        ans[0] = temp;
        return ans;
    }
};