要求
给定一个非负整数 numRows
, 生成「杨辉三角」的前 numRows
行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
示例 1:
输入: numRows = 5
输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
示例 2:
输入: numRows = 1
输出: [[1]]
提示:
- 1 <= numRows <= 30
核心代码
class Solution:
def generate(self, numRows: int) -> List[List[int]]:
if numRows == 0:
return []
rows = [[1]]
i = 1
while i < numRows:
pre_row = rows[-1]
row = [x + y for x, y in zip(pre_row,pre_row[1:])]
rows.append([1,*row,1])
i += 1
return rows
解题思路:这个我们的小时候的问题,下面的数字等于其上面两个数字之和,其实比较简单,但是在我们的程序中比较新颖的一个地方是:x + y for x, y in zip(pre_row,pre_row[1:])
会得到上一排中前一个数和后一个数的和的列表,在*row进行拆包,得到当前行的数据,比较简单,但是思路比较好,值得借鉴。