题目描述
示例
方法一:动态规划
思路和算法
我们用 f(x) 表示爬到第 x 级台阶的方案数,考虑到最后一步可能跨了一级台阶,也可能跨了两级台阶,所以我们可以列出如下式子:f(x) = f(x-1) + f(x-2)
它意味着爬到第 x 级台阶的方案数是爬到第 x-1 级台阶的方案数和爬到第 x-2 级台阶的方案数的和。
边界条件:我们从第0级开始爬,所以从第0级爬到第0级我们可以看作只有一种方案,即 f(0) = 1;从第0级到第1级也只有一种方案,即爬一级,f(1) = 1。
由于 f(x)只和 f(x-1)与f(x-2)有关,所以我们可以用【滚动数组思想】把空间复杂度优化成 O(1)。
代码
class Solution:
def climbStairs(self, n: int) -> int:
p = q = 0
r = 1
for i in range(n):
p = q
q = r
r = p + q
return r