题意:给定一个数组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]。不能使用除法。
思路:因为不能用除法,所以不能把数乘太大,所以分成两个数相乘,一个变小(数组),一个变大(数)
把B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]分成C[i]=A[0]*A[1]*...*A[i-1],D[i]=A[i+1]*...*A[n-1];
先预处理好C[i];
再用一个数代替D[i];
遍历两遍就好了。
class Solution {
public:
vector<int> multiply(const vector<int>& A) {
vector<int> ans(A.size());
if (A.size() == 0) return ans;
vector<int> C;
C.push_back(1);
for (int i = 0; i < A.size()-1; i++)
C.push_back(C.back()*A[i]);
int D = 1;
for (int i = A.size() - 1; i >= 0; i--)
{
ans[i] = C[i] * D;
D = D * A[i];
}
return ans;
}
};