#include<stdio.h>
#include<string.h>
#include <pthread.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <stack>
#include <stdlib.h>
#include <sstream>
using namespace std;
class Solution {
public:
/*
B[i]可以看做矩阵(A组成的方阵去掉对角线)中每行的乘积
下三角用连乘可以很容易求得,上三角,从下往上也是连乘
因此思路是先计算下三角中的连乘,即计算B[i]中的一部分,
然后倒过来按上三角中的分布规律,把另一部分也乘进去
*/
vector<int> multiply(const vector<int>& A) {
int length=A.size();
vector<int>B(length);//初始化数组B时没有确定长度报错了额
if(length!=0){
B[0]=1;
for(int i=1;i<length;i++){
B[i]=B[i-1]*A[i-1];
}
int temp=1;
for(int j=length-2;j>=0;j--){
temp*=A[j+1];
B[j]*=temp;
}
}
return B;
}
};
int main()
{
Solution s;
vector<int> A = { 0,1,1,1,1,1,1,1,1,1 };
vector<int> B=s.multiply(A);
for(size_t i=0;i<A.size();i++)
cout<<B[i]<<" ";
cout<<endl;
return 0;
}