每日一练:爬楼梯

70. 爬楼梯 - 力扣(LeetCode)

题目要求:

解法-1 动态规划 O(N)

这是一道简单的动态规划题,要得到达到第 i 个阶梯的方法总数,就需要得到到达它的上一步 i-1和 i-2 的方法总数,即:dp[i] = dp[i-1]+dp[i-2]。

使用虚拟位让代码更简洁:

cpp 复制代码
class Solution {
public:
    int climbStairs(int n) {
        vector<int> dp(n+2);
        dp[0] = 0; // 虚拟位初始化
        dp[1] = 1; // 虚拟位初始化

        for(int i = 2;i < n+2;i++)
        {
            dp[i] = dp[i-1]+dp[i-2];
        }
        return dp[n+1];
    }
};

优化-使用滑动数组减少内存消耗:

cpp 复制代码
class Solution {
public:
    int climbStairs(int n) {
        int a = 0;
        int b = 1;
        int c;
        for(int i = 0;i < n;i++)
        {
            c = a + b;
            a = b;b = c;
        }
        return c;
    }
};

解法-2 递归 O(N) 会超时

cpp 复制代码
class Solution {
public:
    int climbStairs(int n) {
        if(n <= 2)
            return n;
        return climbStairs(n-1)+climbStairs(n-2);
    }
};
相关推荐
无限进步_2 分钟前
C语言宏的魔法:探索offsetof与位交换的奇妙世界
c语言·开发语言·windows·后端·算法·visual studio
Lucky“经营分析”10 分钟前
经营分析师-《经营分析能力》
算法
狐5713 分钟前
2025-12-04-LeetCode刷题笔记-2211-统计道路上的碰撞次数
笔记·算法·leetcode
咕咕嘎嘎102420 分钟前
C/C++内存对齐
java·c语言·c++
listhi52029 分钟前
激光雷达点云拟合中的ICP(迭代最近点)算法
算法
持续学习的程序员+136 分钟前
强化学习阶段性总结
人工智能·算法
qq_479875431 小时前
C++ 模板元编程
java·开发语言·c++
爱装代码的小瓶子1 小时前
【cpp知识铺子】map与set的底层AVL树
开发语言·数据结构·c++·b树·算法·链表
IT·小灰灰1 小时前
腾讯HY2.0 Think推理模型深度解析:技术突破、应用场景与实践指南
开发语言·人工智能·python·深度学习·神经网络·算法·数据分析
修炼地1 小时前
代码随想录算法训练营第二十八天 | 动态规划理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
c++·算法·动态规划