題目描述:
給你一個整數數組?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 位?整數范圍內
?
我的作答:
第一次接觸上三角和下三角的概念呃呃呃
class Solution(object):def productExceptSelf(self, nums):""":type nums: List[int]:rtype: List[int]"""if not nums: return Nonepre = [1]*len(nums)pre[0] = nums[0]back = [1]*len(nums)back[-1] = nums[-1]result = []for left in range(1, len(nums)):pre[left] = pre[left-1]*nums[left] #下三角for right in range(len(nums)-2, -1, -1):back[right] = back[right+1]*nums[right] #上三角for i in range(len(nums)):if i==0: result.append(back[1])elif i==len(nums)-1: result.append(pre[i-1])else:result.append(pre[i-1]*back[i+1])return result
?
參考:
其實在另一個三角的時候就可以乘積了
class Solution(object):def productExceptSelf(self, nums):""":type nums: List[int]:rtype: List[int]"""ans, tmp = [1] * len(nums), 1for i in range(1, len(nums)):ans[i] = ans[i - 1] * nums[i - 1] # 下三角for i in range(len(nums) - 2, -1, -1):tmp *= nums[i + 1] # 上三角ans[i] *= tmp # 下三角 * 上三角return ans
?