leetcode 238
思路
如果想要不用除法运算,计算i
位置上的结果时,需要i前面所有的乘积,和i
后面所有的乘积。分别用两个数组存储,并计算顺序以及逆序的乘积:
这样只需要遍历三遍就可以求得结果。
如果想要节省空间,可以把前缀乘积和后缀乘积计算结果直接放到相应位置的output
上面。
第一遍存储上前缀乘积,其中i
位置放i
之前的乘积,即可以先放上output
再计算prefix *= nums[i]
:
第二遍计算后缀乘积,倒序计算,直接更新到output
上:
代码
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
本文来自博客园,作者:fakee,转载请注明原文链接:https://www.cnblogs.com/someonefake/p/18212893