首先将杨辉三角稍微变形,方便理解,从题中的等腰三角形变形为如下直角三角形 1 1 1 1 2 1 1 3 3 1 以坐标(i,j)定位识别就是: (0,0) (1,0)(1,1) (2,0)(2,1)(2,2) (3,0)(3,1)(3,2)(3,3) 结合数字三角形和左边三角形看,有以下结论: 1、当j=0,或j=i时,为三角形的直角边和对角边,值为1 2、当 0<j<i,数字在三角形内部时,当前数字的值为正上方和左上方的数字之和,即为dp[i][j]=dp[i-1][j]+dp[i-1][j-1], 由此可得以下代码 class Solution: def generate(self , num: int) -> List[List[int]]: # write code here triangle = [] triangle.append([1]) for i in range(1,num): t = [] for j in range(i+1): if j == 0 or i==j: #当j=0时,是三角形左边首位的1,当i=j时,是右边末尾的1,所以在这种情况直接t.append(1) t.append(1) else: t.append(triangle[i-1][j-1]+triangle[i-1][j])#在三角形中间的数字,是当前数字正上方数字和左上方数字的和 triangle.append(t) return triangle