问题说明:

设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

输入:n = 2
输出:2
解释:有两种方法可以爬到楼顶。
1. 1 阶 + 1 阶
2. 2 阶

答案:

方法一,动态规划,通过列表记录n阶方法数(执行36ms)

class Solution:
    def climbStairs(self, n: int) -> int:
        a=[1,2]
        if n<=2:
            return a[n-1]
        while len(s)<n:
            a.append(s[-1]+s[-2])
        return a[-1]

 

方法二,递归调用(执行超时,加入装饰件解决:@lru_cache(None),执行时间:36ms)

def climbStairs(self, n: int) -> int:
   # @lru_cache(None)
if n == 0 or n == 1: return 1 return self.climbStairs(n - 1) + self.climbStairs(n - 2)

 说明:

其中 @lru_cache(None) 表示

若某参数n为第一次调用climbStairs方法,则执行并将结果放入缓存;
若参数n不是第一次调用climbStairs方法,则直接从缓存中调取结果,以节省时间;

参考链接:https://leetcode.cn/problems/climbing-stairs/solutions/1686970/python3-by-luke2022-5yrd/

方法三(执行28ms)

class Solution:
    def climbStairs(self, n: int) -> int:
        a=b=1
        for i in range(2,n+1):
            a,b=b,a+b
        return b