剑指offer系列40:构建乘积数组

这个题我开始没看懂,呜呜呜……

解释一下题目,意思就是有一个数组A和一个数组B。B的每一项等于A[0]*A[1]……A[i-1]*a[i+1]……A[n-1];

根据题目的意思,A也有n-1项,因此看B的计算表达式除了中间A[i-1]*a[i+1]这里少了一个A[i]没有相乘之外别的项都乘了。因此就是说B[i]就是对A的每一项相乘除了A[i]。

理解了题目就好做了。

 1 class Solution {
 2 public:
 3     vector<int> multiply(const vector<int>& A) {
 4         int len = A.size();
 5         vector<int> res(len);
 6         if (A.empty())
 7             return res;
 8         res[0] = 1;
 9         for (int i = 1; i < len; i++)
10         {
11             res[i] = res[i - 1] * A[i - 1];//计算C[i]
12         }
13         int temp = 1;
14         for (int i = len - 2; i >= 0; --i)
15         {
16             temp *= A[i + 1];//计算D[i]
17             res[i] *= temp;//计算最终的数组B[i]=C[i]*D[i]
18         }
19         return res;
20     }
21 };

 

posted @ 2019-07-24 15:31  妮妮熊  阅读(161)  评论(0编辑  收藏  举报