思路:“除自身以外的数组的乘积”可以转化为求该元素的前缀积和后缀积,即先遍历两遍数组,得到前缀积数组和后缀积数组,第三次遍历即将前缀积数组和后缀积数组按位相乘。
class Solution:
def productExceptSelf(self, nums: List[int]) -> List[int]:
nums_len=len(nums)
ans_list=[]
# answer[i]=prefix[i-1]*suffix[i+1]
# 前缀积 prefix
pre=[]
for i in range(nums_len):
if i:
pre.append(pre[-1]*nums[i-1])
else:
pre.append(1)
# 后缀 suffix
suf=[]
for j in range(nums_len-1,-1,-1):
if j==nums_len-1:
suf.append(1)
else:
suf.append(nums[j+1]*suf[-1])
# 后缀倒序
suf=suf[::-1]
for a in range(nums_len):
ans_list.append(pre[a]*suf[a])
return ans_list
前缀 prefix
后缀 suffix
注意:后缀suffix 需倒序排列
# 后缀倒序
suf=suf[::-1]