题目描述
给定一个数组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]。不能使用除法。
解题
暴力求解
class Solution {
public:
vector<int> multiply(const vector<int>& A) {
vector<int> B;
if(A.size()==0) return B;
int dot=A[1];
for(int i=2; i<A.size(); i++){
dot*=A[i];
//B.push_back(dot);
}
B.push_back(dot);
dot=A[0];
for(int i=1; i<A.size(); i++){
int dotw=A[i+1];
for(int j=i+2; j<A.size(); j++){
dotw*=A[j];
}
if(i==A.size()-1){
B.push_back(dot);
}
else B.push_back(dot*dotw);
dot*=A[i];
//B.push_back(dot);
}
return B;
}
};
o(n)的做法
class Solution {
public:
vector<int> multiply(const vector<int>& A) {
vector<int> B;
if(A.size()==0) return B;
int dot=A[1];
B.push_back(1);
// 上三角的积
for(int i=1; i<A.size(); i++){
B.push_back(B[i-1]*A[i-1]);
}
// 下三角的积
dot=1;
for(int j=A.size()-2; j>=0; j--){
dot=dot*A[j+1];
B[j] *= dot;
}
return B;
}
};
/*
class Solution {
public:
vector<int> multiply(const vector<int>& A) {
vector<int> B;
if(A.size()==0) return B;
int dot=A[1];
for(int i=2; i<A.size(); i++){
dot*=A[i];
//B.push_back(dot);
}
B.push_back(dot);
dot=A[0];
for(int i=1; i<A.size(); i++){
int dotw=A[i+1];
for(int j=i+2; j<A.size(); j++){
dotw*=A[j];
}
if(i==A.size()-1){
B.push_back(dot);
}
else B.push_back(dot*dotw);
dot*=A[i];
//B.push_back(dot);
}
return B;
}
};
*/