构建乘积数组
题目描述
给定一个数组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]。不能使用除法。
大体思路是构造一个二维数组, 数组下标m=n时为1, 构造一个下, 上三角形矩阵, 正如第一个for构造的是下三角形矩阵, 第二个for构造的是上三角形矩阵, 两个矩阵当前行的乘积可用上/下一行的乘积值来获得, 最后把两个矩阵的值相乘
class Solution {
public:
vector<int> multiply(const vector<int>& A) {
int len = A.size();
vector<int> ret;
ret.resize(A.size());
if (len) {
ret[0] = 1;
for (int i = 1; i < len; i++) {
ret[i] = ret[i - 1] * A[i - 1];
}
int temp = 1;
for (int i = A.size() - 2; i >= 0; i--) {
temp *= A[i + 1];
ret[i] = ret[i] * temp;
}
}
return ret;
}
};
暴力法
class Solution {
public:
vector<int> multiply(const vector<int>& A) {
vector<int> ret;
int temp = 1;
int i = 0;
while (i < A.size()) {
for (int j = 0; j < A.size(); j++) {
if (j == i) {
continue;
}
temp = temp * A[j];
}
ret.push_back(temp);
temp = 1;
i++;
}
return ret;
}
};