1. 程式人生 > >【LeetCode & 劍指offer刷題】數組題12:66 構建乘積數組

【LeetCode & 劍指offer刷題】數組題12:66 構建乘積數組

描述 pty height tex ont weight 因此 -c 分布

66 構建乘積數組

66 構建乘積數組

66 構建乘積數組

題目描述

給定一個數組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[i]的值可以看作下圖的矩陣中每行的乘積。 下三角用連乘可以很容求得,上三角,從下向上也是連乘。 因此我們的思路就很清晰了,先算下三角中的連乘,即我們先算出B[i]中的一部分,然後倒過來按上三角中的分布規律,把另一部分也乘進去。 技術分享圖片

class Solution { public: vector<int> multiply(const vector<int>& A) { if(A.empty()) return vector<int>(); vector<int> B(A.size()); //計算下三角連乘 B[0] = 1; for(int i = 1; i<B.size(); i++) // i=1~n-1 { B
[i] = B[i-1] * A[i-1]; //計算連乘值 } //計算上三角連乘 int temp = 1; for(int j = B.size()-1; j>=1; j-- ) //j=n-1~1 { temp *= A[j]; //計算連乘值 B[j-1] *= temp; } return B; } };

【LeetCode & 劍指offer刷題】數組題12:66 構建乘積數組