• 【LeetCode刷题笔记】动态规划 — 70.爬楼梯


    创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
    主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
    更多算法知识专栏:算法分析🔥
    给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ

    在这里插入图片描述
    LeetCode题解专栏:【LeetCode刷题笔记】


    题目链接

    70. 爬楼梯- 力扣(LeetCode)

    一、题目描述

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

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

    二、示例

    示例 1:

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

    1. 1 阶 + 1 阶
    2. 2 阶

    示例 2:

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

    1. 1 阶 + 1 阶 + 1 阶
    2. 1 阶 + 2 阶
    3. 2 阶 + 1 阶

    三、题目分析

    根据题目一次1个或2个台阶,先考虑极端情况:只有一个台阶的情况和只有两个台阶的情况

    • 只有一个台阶:1种方法:爬1个台阶

    • 只有两个台阶:2种方法:爬两次1个台阶、爬一次2个台阶

    在两个台阶的问题中,第一种方法包含了只有一个台阶的情况(爬两次1个台阶:即爬了一个台阶,此时只剩下一个台阶,转化为了只有一个台阶的问题)

    三个台阶时,如果爬1个台阶,还剩2个台阶,转化为了2个台阶的问题;如果爬两个台阶,还剩1个台阶,转化为了1个台阶的问题

    因此,三个台阶的方法等于一个台阶的方法 + 两个台阶的方法,为动态规划问题

    dp数组的定义

    dp[i] 爬到第i层楼梯,有dp[i]种⽅法

    基础情况

    第1个台阶和第2个台阶为最基础的情况,分别是1种、2种方法

    dp[1] = 1;
    dp[2] = 2;

    递推公式

    由题目分析可得:dp[i] = dp[i-1] + dp[i-2]

    四、代码实现(C++)

    class Solution {
    public:
        int climbStairs(int n) {
            vector<int> dp(n+1);
            if(n == 1) return n;
            if(n == 2) return n;
            dp[1] = 1;
            dp[2] = 2;
            for(int i = 3;i <=n; i++){
                 dp[i] = dp[i-1] + dp[i-2];
             }
            return dp[n];
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

    优化

    以三个台阶为例,第三个台阶只依赖于前两个台阶的方法和,第i个台阶只依赖于i - 1i - 2的和

    只需关注前两个的值,其余的可以不去考虑, vector dp(n+1) 缩小为 dp[3],优化空间复杂度(在数据n较大的情况下)

    class Solution {
    public:
        int climbStairs(int n) {
            int dp[3];  	//dp[0]占1个
            if(n == 1) return n;
            if(n == 2) return n;
            dp[1] = 1;
            dp[2] = 2;
            int sum = 0;
            for(int i = 3;i <=n; i++){
                sum = dp[1] + dp[2];
                dp[1] = dp[2];
               dp[2] = sum;
             }
            return dp[2];
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    ** **


    在这里插入图片描述

    大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。
    大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!
    如果本文哪里有错误的地方还请大家多多指出(●'◡'●)
  • 相关阅读:
    在 CentOS 8 中删除旧的 Linux 系统内核
    ElasticSearch集群配置
    低代码开发浅析
    leetcode top100(10) 和为 K 的子数组
    平均负载案例分析
    Spring 事务和事务传播机制
    指针---C语言
    JDBC SQL Server Source Connector: 一览与实践
    应用在电子体温计中的国产温度传感芯片
    Python每日一练(牛客数据分析篇新题库)——第32天:中位函数
  • 原文地址:https://blog.csdn.net/TiSg0/article/details/132793068