剑指offer | 训练题50:构建乘积数组

来源:互联网 发布:网络语言大全2017 编辑:程序博客网 时间:2024/05/16 14:42

题目描述

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

思路

这里写图片描述

/** * 思路:剑指的思路,可以观察B和A的规律 B0     =  1  A1  A2  ... A(n-1) B1     = A0   1  A2  ... A(n-1) B2     = A0  A1   1  ... A(n-1) ... B(n-1) = A0  A1  A2  ... 1 * 由1连成的对角线把矩阵分成了上三角和下三角,可以根据规律先把下三角算出来,然后再对称得出完整的B */class Solution {public:    vector<int> multiply(const vector<int>& A) {        int len = A.size();        if(len == 0) return A;        vector<int> B;        //计算下三角形        B.push_back(1);        for(int i = 1; i < len; i++){            B.push_back(B[i-1] * A[i-1]);        }        //合并上三角形        int temp = 1;        for(int i = len-2; i >= 0; i--){            temp *= A[i+1];            B[i] *= temp;        }        return B;    }};
原创粉丝点击