1 .题目
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 5
输出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
2.思路
(1)每一行第一个和最后一个都是1. 当前元素等于上一行的同列元素+ 前列元素。
def generate(numRows):
triangle = []
for num_rows in range(numRows):
row = [None for _ in range(num_rows+1)]
row[0], row[-1] = 1,1
for j in range(1, num_rows):
row[j] = triangle[num_rows-1][j-1] + triangle[num_rows-1][j]
triangle.append(row)
return triangle
(2)第i行元素 = 第i-1行元素第一位插入0 + 第i-1行元素最后一位加0
1 2 1 0
0 1 2 1
1 3 3 1
class Solution:
def generate(self, numRows: int) -> List[List[int]]:
if numRows == 0:
return []
res = [[1]]
for i in range(1,numRows):
a, b = [0]+res[i-1], res[i-1]+[0]
newRow = [a[i]+b[i]for i in range(len(a))]
res.append(newRow)
return res
3.tips 列表对应元素相加 2种方式
a = [1, 2, 3]
b = [4, 5, 6]
c, d = [], []
c = [i+j for i,j in zip(a,b)]
d = [a[i] + b[i] for i in range(0, len(a))]