题目

image.png

思路

left[i]表示以i为中心,左边的乘积结果(前缀积)
right[i]表示以i为中心,右边的乘积结果(后缀积)
left[i] * right[i]就是除去i外,其余各元素的乘积。

代码

  1. class Solution:
  2. def productExceptSelf(self, nums: List[int]) -> List[int]:
  3. n = len(nums)
  4. left = [None]*n
  5. left[0] = 1
  6. right = [None]*n
  7. right[-1] = 1
  8. # left
  9. for i, num in enumerate(nums[:n-1], start=1):
  10. left[i] = left[i-1] * num
  11. # right
  12. for i in range(n-1, 0, -1):
  13. right[i-1] = right[i]*nums[i]
  14. # left * right
  15. ans = list(map(lambda x: x[0]*x[1], zip(left, right)))
  16. return ans