leetcode 238

fakee發表於2024-05-25

思路

如果想要不用除法運算,計算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

相關文章