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 @ 2024-05-25 19:10  fakee  阅读(5)  评论(0编辑  收藏  举报