构建乘积数组

构建乘积数组

题目描述

给定一个数组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]。不能使用除法。

大体思路是构造一个二维数组, 数组下标m=n时为1, 构造一个下, 上三角形矩阵, 正如第一个for构造的是下三角形矩阵, 第二个for构造的是上三角形矩阵, 两个矩阵当前行的乘积可用上/下一行的乘积值来获得, 最后把两个矩阵的值相乘

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

暴力法

class Solution {
public:
    vector<int> multiply(const vector<int>& A) {
        vector<int> ret;
        int temp = 1;
        int i = 0;
        
        while (i < A.size()) {
            for (int j = 0; j < A.size(); j++) {
                if (j == i) {
                    continue;
                }
                temp = temp * A[j];
            }
            ret.push_back(temp);
            temp = 1;
            i++;
        }
        return ret;
    }
};
原文地址:https://www.cnblogs.com/hesper/p/10501982.html