原题地址。
题目描述
解题思路
遍历乘法
下三角从上往下:从第二行开始,并且给B[0]赋初值1。累乘结果等于前一个的B[i-1]乘以a数组当前索引的前一个的元素a[i-1](这是因为相邻两行之间,下一行比上一行的左三角多了一个**a[i-1]**元素)。一个循环下来之后,每个B元素得到了a数组左下角各自的乘积。
上三角从下往上:从倒数第二行开始,并且给一个tmp变量赋初值1。每一次都将当前的tmp乘以a[i+1](这是因为相邻两行之间,上一行比下一行的右三角多了一个**a[i+1]**元素),并且把这个值乘到B[i]中去。
源代码
class Solution:
def constructArr(self, a: List[int]) -> List[int]:
B = [1]*len(a)
tmp = 1
for i in range(1, len(a)):
B[i] = B[i-1]*a[i-1]
for i in range(len(a)-2, -1, -1):
tmp *= a[i+1]
B[i] *= tmp
return B
运行结果
总结反思
这个题主要用到了数学思想,找出每一行之间的规律,第一次做这个类型的题,还得多刷几道,找到解题思路。