题目描述:
给定一个非负整数 numRows
,生成「杨辉三角」的前 numRows
行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
示例 1:
输入: numRows = 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
示例 2:
输入: numRows = 1 输出: [[1]]
提示:
1 <= numRows <= 30
我的作答:
这种显而易见的递推公式和初始化就很好写哒!
不过要注意边界条件,j的遍历范围是(1, i),相当于最后一个元素是不用更新的喔。。
class Solution:
def generate(self, numRows: int) -> List[List[int]]:
if not numRows: return []
dp = []
for i in range(numRows):
dp.append([1]*(i+1)) #初始化为1
for i in range(1, numRows):
for j in range(1, i):
dp[i][j] = dp[i-1][j-1]+dp[i-1][j] #递推
return dp
参考:
class Solution:
def generate(self, numRows: int) -> List[List[int]]:
c = [[1] * (i + 1) for i in range(numRows)]
for i in range(2, numRows):
for j in range(1, i):
# 左上方的数 + 正上方的数
c[i][j] = c[i - 1][j - 1] + c[i - 1][j]
return c
初始化一行写完消耗内存更少。。