分开求左边和右边。
下三角从上到下,上三角从下到上连成。
先让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 };