代码思路:
当前位置的结果就是它左部分的乘积再乘以它右部分的乘积,因此需要进行两次遍历,第一次遍历求左部分乘积,第二次遍历求右部分的乘积,再将最后的计算结果一起求出来。
class Solution:
def productExceptSelf(self, nums: List[int]) -> List[int]:
length = len(nums)
# L 和 R 分别表示左右两侧的乘积列表
L, R, answer = [0]*length, [0]*length, [0]*length
# L[i] 为索引 i 左侧所有元素的乘积
# 对于索引为 '0' 的元素,L[0] = 1
L[0] = 1
for i in range(1, length):
L[i] = nums[i - 1] * L[i - 1]
# R[i] 为索引 i 右侧所有元素的乘积
# 对于索引为 'length-1' 的元素,R[length-1] = 1
R[length - 1] = 1
for i in reversed(range(length - 1)):
#翻转是因为从右往左,最右边开始
R[i] = nums[i + 1] * R[i + 1]
# 对于索引 i,除 nums[i] 之外其余各元素的乘积就是左侧所有元素的乘积乘以右侧所有元素的乘积
for i in range(length):
answer[i] = L[i] * R[i]
return answer