给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 3
输出: [1,3,3,1]
解题思路1:
这个题与【LeetCode】118. Pascal‘s Triangle 解题报告(Python)一致,可以稍稍优化一下118的算法,每次保存上一行,根据上一行计算当前行即可
提交代码1:(动态规划,Runtime: 36 ms, faster than 89.08 % )
class Solution:
def getRow(self, rowIndex: int) -> 'List[int]':
rowIndex = rowIndex + 1
if rowIndex == 0: return []
if rowIndex == 1: return [1]
if rowIndex == 2: return [1, 1]
up = [1, 1]
for i in range(2, rowIndex):
t = [1]
for j in range(1,i):
t.append(up[j-1] + up[j])
t.append(1)
up = t
return t
解题思路2:
这个题也可以一边用当前行,一边计算当前行,即:
res[i] += res[i+1] , 这是一种非常聪明的计算方法
提交代码2:(动态规划,Runtime: 28 ms, faster than 78.67 % )
class Solution:
def getRow(self, rowIndex: int) -> 'List[int]':
res = []
for i in range(rowIndex + 1):
res.insert(1, 1)
for j in range(1, i):
res[j] += res[j + 1]
return res