劍指offer: 構建乘積數組 c++實現

給定一個數組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[0] = A[1] * A[2] * ... * A[n-1],B[n-1] = A[0] * A[1] * ... * A[n-2];)

 

class Solution {
public:
    // B就像是對角線上爲1,其他數據爲Ai的矩陣的橫向乘積
    // 可以看作是兩個三角矩陣,Bi分爲兩部分 Ci 和 Cj Ci 爲 0 -> i-1  Cj 爲 i+1->n 
    vector<int> multiply(const vector<int>& A) {
       vector<int> ci;
       vector<int> cj;
       vector<int> B;
       ci.push_back(1);
       cj.push_back(1);
       int size = A.size();
       for(int i = 1; i < size - 1; i++){
           int c = ci[i-1] * A[i];
           ci.push_back(c);
       }
       for(int i = size - 1; i > 0; i--){
           int c = cj[size - i - 1] * A[i];
           cj.push_back(c);
       }
       B.push_back(cj[size - 1]);
       for(int i = 0; i < size - 1; i++){
           ci[i] = ci[i] * cj[size - i - 1 - 1];
           B.push_back(ci[i]);
       }
       return B;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章