剑指Offer——构建乘积数组

题目描述:

给定一个数组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]。不能使用除法。


分析:

分别计算A[0]*A[1]*...*A[i-1]和A[i+1]*...*A[n-1],最后相乘即可。


代码:

 1 class Solution {
 2 public:
 3     vector<int> multiply(const vector<int>& A) {
 4         vector<int> a;
 5         int ASize = A.size();
 6         if(ASize == 0 || ASize == 1) return a;
 7         vector<int> b;
 8         b.push_back(A[ASize - 1]);
 9         for(int i = 1; i < ASize; i++) {
10             b.push_back(b[i - 1]*A[ASize - 1 - i]);
11         }
12         a.push_back(b[ASize - 2]);
13         int tmp = A[0];
14         for(int i = 1; i < ASize - 1; i++) {
15             a.push_back(tmp * b[ASize - i - 2]);
16             tmp *= A[i];
17         }
18         a.push_back(tmp);
19         return a;
20     }
21 };
原文地址:https://www.cnblogs.com/jacen789/p/7747771.html