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

浙公网安备 33010602011771号