法1:暴力
时间复杂度为On^2
vector<int> multiply(vector<int>& A) {
// write code here
vector<int> res;
int len = A.size();
for(int i = 0; i < len; ++i){
int b = 1;
for(int j = 0; j < len; ++j){
if(j == i) continue;
b = b * A[j];
}
res.emplace_back(b);
}
return res;
}
法2:时间复杂度更低的方法

如图所示,矩阵中由对角线1将其分成了上三角和下三角。 可以发现,B[i]的值可以由两部分相乘得到:左下三角与右上三角,例如,B[2]的值为A[0]*A[1]的左下三角,与A[3]到A[n-1]的右上三角相乘得到。 分别维护左下三角与右上三角的值,最后相乘,就可以得到结果。
vector<int> multiply(vector<int>& A) {
// write code here
vector<int> res;
int len = A.size();
res.resize(len, 1);
for(int i = 1; i < len; ++i){
// 先维护左下三角区域
res[i] = A[i-1] * res[i-1];
}
//再计算右上角区域
int tempA = 1;
for(int i = len - 2; i >= 0; --i){
tempA *= A[i + 1];
res[i] = res[i] * tempA;
}
return res;
}