首先将杨辉三角稍微变形,方便理解,从题中的等腰三角形变形为如下直角三角形
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