给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 5
输出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
#最直观的思路
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
设定result用来存放结果
遍历所有的行,当进入新的一行时,应该先append一个[]用来存放改行的数字
接着向该行添加第一个元素1,
随后进入循环开始添加第二个元素=上一行同位置的元素+上一行同位置的前一个元素
循环至每行的倒数的第二个元素
最后判断每行的元素是否小于该行号,
若小于再在末尾添加1(预防numRows=1的情况)
class Solution:
def generate(self, numRows: int) -> List[List[int]]:
result = []
for i in range(1, numRows + 1):
result.append([])
result[-1].append(1)
# if len(result[-1]) < i-1:
for j in range(1, i-1):
result[-1].append(result[-2][j] + result[-2][j-1])
if len(result[-1]) < i:
result[-1].append(1)
return result
#取巧的方法
利用python 的zip函数
首先利用上一行的结果生成两个list
一个list为 在上一行的结果前面添加一个0元素
一个list为 在上一行的结果最后面添加一个0元素
随后将两个list同一位置的元素进行相加得到一个新的list
这个新的list便是下一行的结果
class Solution:
def generate(self, numRows: int) -> List[List[int]]:
if numRows == 0:
return []
else:
results = [[1]]
while len(results) < numRows:
newRow = [a + b for a, b in zip([0]+results[-1], results[-1]+[0])]
print(newRow)
results.append(newRow)
return results