1、题目描述
给定一个非负整数 numRows
,生成「杨辉三角」的前 numRows
行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
示例 1:
输入: numRows = 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
示例 2:
输入: numRows = 1 输出: [[1]]
2、初始思路
2.1 思路
使用动态规划
1、确定dp数组及其含义
dp数组表示的是杨辉三角各个点的值
2、确定递推公式
题目中已经给出“在「杨辉三角」中,每个数是它左上方和右上方的数的和。”,因此,递推公式可表示为:
dp[i][j] = dp[i-1][j-1] + dp[i-1][j]
3、初始化dp数组
通过观察,可以将杨辉三角初始化为每层递加的[1],如下:
dp = [[1] * (i+1) for i in range(numRows)]
2.2 完整代码
class Solution:
def generate(self, numRows: int) -> List[List[int]]:
dp = [[1]*(i+1) for i in range(numRows)]
for i in range(2,numRows):
for j in range(1,i):
dp[i][j] = dp[i-1][j-1] + dp[i-1][j]
return dp