构建乘积数组

分开求左边和右边。

下三角从上到下,上三角从下到上连成。

先让B[0]=1,从B[1]开始计算;

B[1] = A[1]左边的连成=A[0] X 1;

B[2] = A[2]左 = A[0]XA[1] = B[1]XA[1] ........

B[i] = B[i-1] X A[i-2]

计算到B[n-1],此时的B[n-1]已经是最终的B[n-1]的值了,所以从B[n-2]开始计算:

需要一个temp来存储连乘结果的临时变量temp;

 temp=1;

n-2项:temp = temp x A[n-1] = A[n-1],B[n-2] = B[n-2] x temp;  

n-3项:temp = temp x A[n-2] = A[n-2] x A[n-1], B[n-3]终 = B[n-3] x temp;

 

 1 class Solution {
 2 public:
 3     vector<int> multiply(const vector<int>& A) {
 4         int len=A.size();
 5         vector<int> B(len);
 6         if(len<=1) return A;
 7         B[0]=1; 
 8         for(int i=1;i<len;i++){
 9             B[i] = B[i-1]*A[i-1];
10         }
11         int temp=1;
12         for(int i=len-2;i>=0;i--){
13             temp*=A[i+1];
14             B[i]*=temp;
15         }
16         return B;
17     }
18 };

 

posted @ 2019-07-24 16:16  Austin_anheqiao  阅读(173)  评论(0编辑  收藏  举报