1.题目描述
给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。
2.输入输出案例
- 示例 1:
输入: numRows = 5
输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]- 示例 2:
输入: numRows = 1
输出: [[1]]
3.解题思路(语言不限C++/C/java/python均可)
- 如果输入的numRows为1,直接输出第一行1([[1]])
- 如果输入的numRows为2,直接输出前两行的1([[1],[1,1]])
- 输入的numRows > 2,行号大于2的第一个和最后一个数为1,其余的数为上一行当前列和上一行前一列的和即 current_row[i][j] = pre_row[i-1][j] + pre_row[i-1][j-1]
4.代码实现
def generate(self, numRows: int) -> List[List[int]]:
res = [] # 最大的嵌套列表
if numRows == 1:
return [[1]]
else:
res.append([1])
if numRows == 2:
return [[1],[1,1]]
else:
res.append([1,1])
idx = 2
# idx是行标
while idx < numRows:
current_row = []
row_idx = 0
# 计算行号大于2的每一行
while row_idx <= idx:
if row_idx == 0 or row_idx == idx:
current_row.append(1)
else:
# 关键语句
num = res[idx-1][row_idx] + res[idx-1][row_idx-1]
current_row.append(num)
row_idx += 1
res.append(current_row)
idx += 1
return res