leetcode 70. 爬楼梯 easy 动态规划 斐波那契数列


初始条件:

f(1) = 1 (只有 1 阶 → 只有 1 种方法)

f(2) = 2 (两阶 → 1+1 或 2)

假设 f(n) 表示爬到第 n 阶楼梯的方法数:

最后一步是 1 阶 → 前面已经爬到第 n-1 阶 → 有 f(n-1) 种方法

最后一步是 2 阶 → 前面已经爬到第 n-2 阶 → 有 f(n-2) 种方法

所以状态转移方程是:f(n)=f(n−1)+f(n−2)


方法 1:递归(指数级时间复杂度)

时间复杂度:O(2^n)

空间复杂度:O(n)(递归栈)

python 复制代码
class Solution:
    def climbStairs(self, n: int) -> int:

        # 最后一步是 1 阶 → 前面已经爬到第 n-1 阶 → 有 f(n-1) 种方法
        # 最后一步是 2 阶 → 前面已经爬到第 n-2 阶 → 有 f(n-2) 种方法

        # f(n)=f(n−1)+f(n−2)
        # 递归

        if n==1:
            return 1
        if n==2:
            return 2
        
        return self.climbStairs(n-1) + self.climbStairs(n-2)  # class中自己调自己,加self

超时


方法2: 动态规划

时间复杂度:O(n)

空间复杂度:O(1)

python 复制代码
class Solution:
    def climbStairs(self, n: int) -> int:

        # 最后一步是 1 阶 → 前面已经爬到第 n-1 阶 → 有 f(n-1) 种方法
        # 最后一步是 2 阶 → 前面已经爬到第 n-2 阶 → 有 f(n-2) 种方法

        # f(n)=f(n−1)+f(n−2)
        # 动态规划 时间复杂度:O(n), 空间复杂度:O(1)

        if n==1:
            return 1
        if n==2:
            return 2

        # 对第3层台阶来说
        prev2 = 1     # 上一步走了2步,还能再走1步
        prev1 = 2     # 上一步走了1步,还能再走2步

        for cur_floor in range(3, n+1):  #从第3层台阶开始,往上走到第n层台阶

            current = prev1 + prev2  #  前阶的走法数 f(n)=f(n−1)+f(n−2) 

            prev2 = prev1      # 对下一层台阶来说,cur_floor的f(n-1)是:下一层台阶的f(n-2)走法
            prev1 = current    # 对下一层台阶来说,cur_floor是f(n-1)的走法

        return current  
相关推荐
Tisfy21 小时前
LeetCode 0836.矩形重叠:xy两方向分别看
数学·leetcode·题解·模拟
青山木1 天前
Hot 100 --- 最长递增子序列
java·数据结构·算法·leetcode·动态规划
土司大王1 天前
LeetCode hot100——33.搜索旋转排序数组:Java 二分模板与 O(log n) 实现
数据结构·算法·leetcode
辰辉创聚1 天前
禽流感病毒分子基础:表面抗原与内部转录复合体的功能解析
ide·leetcode·rabbitmq·重组血凝素蛋白·甲型流感病毒核蛋白·禽流感单抗
ysu_03141 天前
08-二叉树遍历:四种方式详解
c语言·数据结构·算法·leetcode
土司大王1 天前
LeetCode hot100——153.寻找旋转排序数组中的最小值:Java 二分模板与 O(log n) 分析
java·算法·leetcode
土司大王1 天前
LeetCode hot100——4.寻找两个正序数组的中位数:Java 二分第K小 递归裁剪
java·算法·leetcode
6Hzlia1 天前
【Classic 150 刷题计划】 LeetCode 123. 买卖股票的最佳时机 III | C++ 状态机动态规划与通用交易拓展
c++·算法·leetcode
All for pursuit.1 天前
【矩阵-2】240.搜索二维矩阵 II
数据结构·c++·算法·leetcode