leetcode 238

思路

如果想要不用除法运算,计算i位置上的结果时,需要i前面所有的乘积,和i后面所有的乘积。分别用两个数组存储,并计算顺序以及逆序的乘积:
image
这样只需要遍历三遍就可以求得结果。

如果想要节省空间,可以把前缀乘积和后缀乘积计算结果直接放到相应位置的output上面。
第一遍存储上前缀乘积,其中i位置放i之前的乘积,即可以先放上output再计算prefix *= nums[i]
image
第二遍计算后缀乘积,倒序计算,直接更新到output上:
image

代码

class Solution:
def productExceptSelf(self, nums: List[int]) -> List[int]:
n = len(nums)
prefix, postfix = 1, 1
output = [1] * n
for i in range(n):
output[i] = prefix
prefix *= nums[i]
for j in range(n - 1, -1, -1):
output[j] *= postfix
postfix *= nums[j]
return output
posted @   fakee  阅读(6)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示