思路:
如果知道了i左边所有数的乘积,以及i右边所有数的乘积,就可以算出answer[i]。先计算 suf,然后一边计算 pre,一边把 pre直接乘到 suf[i]中。最后返回 suf。
代码:
from typing import List
class Solution:
def productExceptSelf(self, nums: List[int]) -> List[int]:
n = len(nums)
suf = [1] * n
for i in range(n - 2, -1, -1):
suf[i] = suf[i + 1] * nums[i + 1]
pre = 1
for i, num in enumerate(nums):
# 此时 pre 为 nums[0] 到 nums[i-1] 的乘积,直接乘到 suf[i] 中
suf[i] *= pre
# 更新 pre 为 nums[i+1] 到 nums[n-1] 的乘积
pre *= num
return suf