当前位置: 首页 > article >正文

刷题记录 动态规划-3: 70. 爬楼梯

题目:70. 爬楼梯

难度:简单

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

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

示例 1:

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

示例 2:

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

提示:

  • 1 <= n <= 45

一、模式识别:动态规划

本题看似相比于斐波那契数列稍微复杂一点,但稍微分析一下就会发现一毛一样

五部曲:

1.动规数组意义:爬n台阶的方法个数

2.递推公式:和斐波那契数列一毛一样,解释:

当你需要爬n阶楼梯时,你有两个选择:

①爬1阶,再爬n - 1阶

②爬2阶,再爬n - 2阶

所以爬n阶的方法个数就是:爬n - 1阶的个数 + 爬n - 2阶的个数

即F(n) = F(n - 1) + F(n - 2)

3.初始化:斐波那契数列略有不同,F(0) 不存在,F(1) = 1,F(2) = 2;或者假定F(0) = 1

4.遍历顺序:本题常规,根据递推公式可知是从前往后

5.举例:较简单,这里省略

二、代码实现

这几种实现方式背后的代码逻辑相同,但各有优劣

1.缓存从0到n的F

该方法可读性较强,耗时低,但占空间较高

class Solution:
    def climbStairs(self, n: int) -> int:
        if n <= 2:
            return n
        dp = [1] * (n + 1)
        for i in range(2, n + 1):
            dp[i] = dp[i - 1] + dp[i - 2]
        return dp[n]
  • 时间复杂度:O(n)
  • 空间复杂度:O(n)

耗时:0ms

2.只缓存两个F

该方法可读性较弱,但耗时和占空间都较低

class Solution:
    def climbStairs(self, n: int) -> int:
        if n <= 2:
            return n
        dp = [1] * (n + 1)
        for i in range(2, n + 1):
            dp[i] = dp[i - 1] + dp[i - 2]
        return dp[n]
  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

耗时:0ms

3.递归

注意:和斐波那契数列不同,本方法在本题中会超时

class Solution:
    def fib(self, n: int) -> int:
        if n <= 1:
            return n
        return self.fib(n - 1) + self.fib(n - 2)
  • 时间复杂度:O(2^n)
  • 空间复杂度:O(n)

耗时:超时


http://www.kler.cn/a/530554.html

相关文章:

  • 自然语言处理(NLP)入门:基础概念与应用场景
  • (9) 上:学习与验证 linux 里的 epoll 对象里的 EPOLLIN、 EPOLLHUP 与 EPOLLRDHUP 的不同
  • 【Elasticsearch】实现气象数据存储与查询系统
  • Ruby 模块(Module)
  • Upscayl-官方开源免费图像AI增强软件
  • Vue简介
  • SpringMVC拦截器详解:原理、使用与配置
  • 【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.4 索引优化:避免意外复制的高效技巧
  • deepseek使用教程
  • 力扣 347. 前 K 个高频元素
  • Baklib赋能企业提升内容中台构建效率的全新路径解析
  • 基于人脸识别的课堂考勤系统
  • 【系统迁移】将系统迁移到新硬盘中(G15 5520)
  • 高清种子资源获取指南 | ✈️@seedlinkbot
  • 第六篇:事务与并发控制
  • 算法【混合背包】
  • 深入探索 Android 技术:从基础到前沿
  • 向上管理的必要性
  • 本地部署DeepSeek 多模态大模型Janus-Pro-7B
  • C++ 常用排序算法
  • 音视频入门基础:RTP专题(5)——FFmpeg源码中,解析SDP的实现
  • XML DOM 节点信息
  • 眼见着折叠手机面临崩溃,三星计划增强抗摔能力挽救它
  • 【LeetCode 刷题】回溯算法-分割问题
  • 如何本地部署DeepSeek?DeepThink R1 本地部署全攻略:零基础小白指南。
  • 蓝桥杯单片机第七届省赛