劍指offer----構建乘積陣列
阿新 • • 發佈:2018-12-14
題目描述 給定一個數組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]。不能使用除法。
//解題思路就跟劍指offer上的解題思路一致,將Bn擴充套件為一個左對角線全為1的二維矩陣 //分別計算左下三角和右上三角的值 //圖片以n=4為例,先算左下角,再算右上角 class Solution { public: vector<int> multiply(const vector<int>& A) { if(A.size()==0)return vector<int>(); //建立長度為n的陣列,初始化為1 vector<int> B(A.size(),1); //計算下三角的值 for(int i=1;i<A.size();++i) { B[i]=B[i-1]*A[i-1]; } //利用temp計算上三角的值 int temp=1; for(int j=A.size()-1;j>=0;--j) { B[j]*=temp; temp*=A[j]; } return B; } };