题目:
给定数组A[n],构建一个数组B[n],B[i] = A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1],要求不用除法实现。
解法:
把数组A[n]以A[i]为界限分成左半段和右半段。每一侧都用一个循环求相应的值即可
例如。有两个辅助数组help1和help2.在求B[5]时候。help1=A0*A1*A2*A3*A4 ,help2=A6*A7*...*A[n-1]
每一个help从初始值开始,可以用循环依次求得所有值。
代码如下:
vector<int> multiply(const vector<int>& A) {
vector<int> res;
if(A.size()==0 ||A.empty())
return res;
int n = A.size();
vector<int> v1(n);
vector<int> v2(n);
v1[0]=1;
v2[n-1]= 1;
for(int i =1;i<n;i++) //左侧值
v1[i] = v1[i-1]*A[i-1];
for(int i =n-2;i>=0;i--)//右侧值
v2[i] = v2[i+1]*A[i+1];
for(int i =0;i<n;i++)
res.push_back(v1[i]*v2[i]);
return res;
}