題目
給你一個整數數組?nums
,返回 數組?answer
?,其中?answer[i]
?等于?nums
?中除?nums[i]
?之外其余各元素的乘積?。
題目數據?保證?數組?nums
之中任意元素的全部前綴元素和后綴的乘積都在??32 位?整數范圍內。
請?不要使用除法,且在?O(n)
?時間復雜度內完成此題。
示例 1:
輸入: nums = [1,2,3,4]輸出: [24,12,8,6]
示例 2:
輸入: nums = [-1,1,0,-3,3] 輸出: [0,0,9,0,0]
提示:
2 <= nums.length <= 105
-30 <= nums[i] <= 30
- 輸入?保證?數組?
answer[i]
?在??32 位?整數范圍內
進階:你可以在?O(1)
?的額外空間復雜度內完成這個題目嗎?( 出于對空間復雜度分析的目的,輸出數組?不被視為?額外空間。)
題解
class Solution(object):def productExceptSelf(self, nums):""":type nums: List[int]:rtype: List[int]"""n = len(nums)answer = [1] * nleft_product = 1for i in range(n):answer[i] = left_productleft_product *= nums[i]right_product = 1for i in range(n - 1, -1, -1):answer[i] *= right_productright_product *= nums[i]return answer
代碼說明
-
第一次遍歷:從左到右遍歷數組,計算每個位置左邊所有元素的乘積,并存儲在一個數組?
left
?中。 -
第二次遍歷:從右到左遍歷數組,計算每個位置右邊所有元素的乘積,并存儲在一個數組?
right
?中。 -
最終結果:將?
left
?和?right
?數組對應位置相乘,得到最終的結果。