题目描述
https://leetcode-cn.com/problems/product-of-array-except-self/
思路题解
左右乘积列表法
class Solution:
def productExceptSelf(self, nums: List[int]) -> List[int]:
left,right=[nums[0]],[nums[-1]]
n=len(nums)
for i in range(1,n):
left.append(left[i-1]*nums[i])
right.append(right[i-1]*nums[n-i-1])
# print(left,right)
nums[0],nums[-1]=right[n-2],left[n-2]
for i in range(1,n-1):
nums[i]=left[i-1]*right[n-i-2]
return nums
空间复杂度 O(1)的方法
class Solution:
def productExceptSelf(self, nums: List[int]) -> List[int]:
n=len(nums)
ans=[0]*n
ans[0]=1
for i in range(1,n): #ans[i]代表i左边的总乘积
ans[i]=ans[i-1]*nums[i-1]
r=1
for i in range(n-1,-1,-1): #r代表i右边的总乘积,最右边的元素右边无元素,因此为1.
#ans[i]=左边乘积*右边乘积
ans[i]=ans[i]*r
r*=nums[i]
return ans