题目描述

给定一个数组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;
    }
};