题解
O ( k ) O(k) O(k)空间复杂度,我们在118.杨辉三角基础上进行优化,仅保存上一行。
模拟法(动态规划)
- 特判,若 k = = 0 k==0 k==0,返回 [ 1 ] [1] [1]
- 初始化 d p = [ 1 , 1 ] dp=[1,1] dp=[1,1],表示第二行
- 遍历区间
[
3
,
k
+
2
)
[3,k+2)
[3,k+2),表示从第三行开始遍历:
- 初始化 c u r = [ 1 , 0 , . . . , 0 , 1 ] cur=[1,0,...,0,1] cur=[1,0,...,0,1],长度为当前行数
- 从 c u r cur cur第二个元素到倒数第二个元素,利用动态规划: c u r [ j ] = d p [ j − 1 ] + d p [ j ] cur[j]=dp[j-1]+dp[j] cur[j]=dp[j−1]+dp[j]
- 将 d p dp dp更新为 c u r cur cur
- 返回 d p dp dp
复杂度分析
- 时间复杂度: O ( k 2 ) O(k^{2}) O(k2),等差数列求和。
- 空间复杂度: O ( k ) O(k) O(k)。
Python
class Solution:
def getRow(self, rowIndex: int) -> List[int]:
if(rowIndex==0):
return [1]
dp=[1,1]
for i in range(3,rowIndex+2):
cur=[0]*(i)
cur[0]=cur[-1]=1
for j in range(1,i-1):
cur[j]=dp[j-1]+dp[j]
dp=cur
return dp