1. 程式人生 > >Leetcode 238:除自身以外陣列的乘積(最詳細的解法!!!)

Leetcode 238:除自身以外陣列的乘積(最詳細的解法!!!)

給定長度為 n 的整數陣列 nums,其中 n > 1,返回輸出陣列 output ,其中 output[i] 等於 nums 中除 nums[i] 之外其餘各元素的乘積。

示例:

輸入: [1,2,3,4]
輸出: [24,12,8,6]

說明: 請**不要使用除法,**且在 O(n) 時間複雜度內完成此題。

進階:
你可以在常數空間複雜度內完成這個題目嗎?( 出於對空間複雜度分析的目的,輸出陣列不被視為額外空間。)

解題思路

首先想到的思路就是將所有元素乘起來,然後遍歷陣列中的元素再除以對應元素即可。但是這種做法很快被駁回,我們不可以使用除法。非常簡單,我們可以遍歷nums

,在遍歷的過程中將對應元素累乘,例如

1  2  3  4
1  1  2  6

這樣我們就得到了對應元素左邊所有元素的乘積。然後我們反向遍歷nums,做相同操作即可。

1  2  3  4
24 12 4  1

再將兩個結果相乘即可。

1  2  3  4
24 12 8  6

程式碼如下

class Solution:
    def productExceptSelf(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        nums_len =
len(nums) leftPro = [1]*len(nums) for i, num in enumerate(nums[:-1]): leftPro[i+1] = leftPro[i]*num right = 1 for i in range(nums_len-1, -1, -1): leftPro[i] *= right right *= nums[i] return leftPro

我將該問題的其他語言版本新增到了我的

GitHub Leetcode

如有問題,希望大家指出!!!