思路:整个数组遍历两次:
第一次遍历数组的时候,从左边开始,记录下每个元素左边所有元素的乘积。
第二次遍历数组的时候,从右边开始,记录下每个元素右边所有元素的乘积。
然后相乘即可。
简化为空间复杂度O(1)的代码即为:
class Solution:
def productExceptSelf(self, nums: List[int]) -> List[int]:
#走两遍,左右各一遍,保存每个元素左边的乘积和右边的乘积
left=1
right=1
output=[None for i in range(len(nums))]
for i in range(0,len(nums)):
output[i]=left
left*=nums[i]
for j in range(len(nums)-1,-1,-1):
output[j]*=right
right*=nums[j]
return output
一开始还真的想不到。