问题
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 5
输出:
思路及代码
# 方法:动态规划
# 思路:每一行第一个元素为1,最后一个元素为1,其余用公式dp[i][j] = dp[i-1][j-1]+dp[i-1][j]进行计算
# 时间复杂度:O(numRows^2)
# 空间复杂度:O(numRows^2),因为每操作一次,就要更新一次结果数组,因此空间复杂度和时间复杂度相同
class Solution:
def generate(self, numRows: int) -> List[List[int]]:
dp = [[1], [1, 1]]
if numRows == 0:
return []
elif numRows == 1:
return [dp[0]]
elif numRows == 2:
return dp
else:
for i in range(2, numRows): # 第i行
tmp = [1]
for j in range(1, i): # 第j列
tmp.append(dp[i-1][j-1] + dp[i-1][j])
tmp.append(1)
dp.append(tmp)
return dp