首页 > 代码库 > [LintCode] Product of Array Except Self 除本身之外的数组之积

[LintCode] Product of Array Except Self 除本身之外的数组之积

 

Given an integers array A.

Define B[i] = A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1], calculate B WITHOUT divide operation.

Have you met this question in a real interview? 
Yes
Example

For A = [1, 2, 3], return [6, 3, 2].

 

LeetCode上的原题,请参见我之前的博客Product of Array Except Self。

 

解法一:

class Solution {public:    /**     * @param A: Given an integers array A     * @return: A long long array B and B[i]= A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1]     */    vector<long long> productExcludeItself(vector<int> &nums) {        int n = nums.size();        vector<long long> fwd(n, 1), bwd(n, 1), res(n);        for (int i = 0; i < n - 1; ++i) {            fwd[i + 1] = fwd[i] * nums[i];        }        for (int i = n - 1; i > 0; --i) {            bwd[i - 1] = bwd[i] * nums[i];        }        for (int i = 0; i < n; ++i) {            res[i] = fwd[i] * bwd[i];        }        return res;    }};

 

解法二:

class Solution {public:    /**     * @param A: Given an integers array A     * @return: A long long array B and B[i]= A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1]     */    vector<long long> productExcludeItself(vector<int> &nums) {        long long n = nums.size(), right = 1;        vector<long long> res(n, 1);        for (int i = 1; i < n; ++i) {            res[i] = res[i - 1] * nums[i - 1];        }        for (int i = n - 1; i >= 0; --i) {            res[i] *= right;            right *= nums[i];        }        return res;    }};

 

[LintCode] Product of Array Except Self 除本身之外的数组之积