我们接着继续来分享一道题目 -> 除自身以外数组的乘积
这道题目的话题意很简单, 就是让你返回一个数组, 这个数组每个值是除了这个数之外其他所有值的乘积.
实际上好像还有一个类似的题目, 题目的大概意思就是给你一个数组int nums[], 然后让你返回一个数组int ret[], 这个数组中的每个元素ret[i] = sum - nums[i].
1. 不能用所有数的乘积 / nums[i] 这个思路.
我第一次做的时候, 就是想着我直接把nums中所有元素一口气全部乘起来, 然后我填ret返回数组的时候, ret[i] = sum / num[i]
不就完了?
事实证明, 我忘掉了nums[i]的值有可能是0. 如果nums中存在一个0, 那么sum = 0, 而nums中等于0的那个值对应的ret数组的元素却不是0!
2. 思路是: 前缀积 * 后缀积
然后我想了一个新的思路, 我开一个n + 1大小的数组, 这个数组0是1, 1代表nums[0]之前所有元素的乘积, 2代表nums[1]之气那所有元素的乘积. 我再开一个数组, 这个数组0代表某个数之后所有数的乘积.
3. 出来自身意外数组的乘积 = 前缀积 * 后缀积
这个的话整体思路就相当明确了, 看下面图:
参考代码是:
class Solution {
public: