1.题目描述
给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。
- 上面的例子是输入整数3,给出的结果
2.输入输出案例
- 示例 1:
输入: rowIndex = 3
输出: [1,3,3,1]- 示例 2:
输入: rowIndex = 0
输出: [1]- 示例 3:
输入: rowIndex = 1
输出: [1,1]
3.解题思路(语言不限C++/C/java/python均可)
- 由我们之前杨辉三角问题可知,当所求行大于2时,当前所求行地元素只与上一行元素有关(current_row[i][j] = pre_row[i-1][j] + pre_row[i-1][j-1]),** 又因为题目只求某一行,所以我们可以利用这种关系来简化存储(只用存两行即可) **
- 题目只要求输出一个列表(数组),包含指定行的元素,故不用存储0-tar(tar假设为题目给定的行号)所有行的元素,可以只设置两个列表pre,now,当行号大于2时,pre用于存储上一行元素,now用来计算当前行元素。
4.代码实现
def getRow(self, rowIndex: int) -> List[int]:
if rowIndex == 0: # 第零行和第一行直接输出
return [1]
elif rowIndex == 1:
return [1,1]
else: # 设置两个列表(数组)只记录两行的元素
pre = [1,1] # 初始化的pre
now = []
idx = 2 # 既然不是第0和1行,那么从第二行开始(若是第0,1行就直接执行上面两分支其一了)
while idx < (rowIndex + 1):
row_idx = 0 # 新的一行的下标
while row_idx <= idx: # 第一个或最后一个元素只能是1
if row_idx == 0 or row_idx == idx:
now.append(1)
else: # 利用上一行同列和上一行前一列元素计算当前元素
num = pre[row_idx] + pre[row_idx - 1]
now.append(num)
row_idx += 1
pre = now # 将最新的now赋值给pre,计算下一行的元素
now = [] # now每次置为空,最后一次因为now为空,故最终结果在pre中
idx += 1
return pre # 返回最终结果