题目
给定一个非负整数 _numRows
,_生成「杨辉三角」的前 numRows
行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
题解
递推公式题目已经给出,讨论一下边界情况,把问题具体定义就好了。
问题公式化
三角形每行用List存储,所有行也用List存储。
设dp[r][c]
是杨辉三角第r行第c列的数。
把三角形左侧对齐可以观察到:
左上方的数就是dp[r - 1][c - 1]
;
右上方的数就是dp[r - 1][c]
;
状态转移方程
dp[r][c] = dp[r - 1][c - 1] + dp[r - 1][c]
边界处理
r = 0时,没有上方,但其实知道第一行是1,只有1个元素,直接添加到结果集就行了。
r > 0后:
c = 0 处于第一列时,没有左上方,左上方当作0,只累加右上方,dp[r][0] = dp[r - 1][c]
。
c = r 处于最后一列时,没有右上方,右上方当作0,只累加左上方,dp[r][r] = dp[r - 1][r - 1]
。
代码
1 | class Solution { |