Leetcode 238:除自身以外陣列的乘積(最詳細的解法!!!)
阿新 • • 發佈:2018-11-09
給定長度為 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
如有問題,希望大家指出!!!