class Solution:
def constructArr(self, a: List[int]) -> List[int]:
# 考虑上下三角,对角线元素为1
n = len(a)
b = [1]*n
# 先计算下三角
for i in range(1,n):
b[i] = b[i-1]*a[i-1]
# 再计算上三角,temp存储右边的积
temp = 1
for i in range(n-2,-1,-1):
temp *= a[i+1]
b[i] *= temp
return b
"""
# 动态规划标准写法
n = len(a)
if n == 0:
return a
left = [1] * n
right = [1] * n
for i in range(1,n):
left[i] = left[i-1]*a[i-1]
for i in range(n-2,-1,-1):
right[i] = right[i+1]*a[i+1]
b = [0] * n
for i in range(n):
b[i] = left[i]*right[i]
return b
"""
07-27
862
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)