每日一练:爬楼梯

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);
    }
};
相关推荐
问道飞鱼30 分钟前
Redis缓存淘汰算法详解
redis·算法·缓存
乌恩大侠2 小时前
控制流的高级用法或探讨更复杂的编程主题
算法
喵~来学编程啦2 小时前
【经典机器学习算法】谱聚类算法及其实现(python)
算法·机器学习·聚类
六点半8882 小时前
【C++】“list”的介绍和常用接口的模拟实现
开发语言·数据结构·c++·算法·青少年编程·list
坊钰3 小时前
【Java SE 题库】移除元素(暴力解法)--力扣
java·开发语言·学习·算法·leetcode
不爱学英文的码字机器5 小时前
[C++] 剖析AVL树功能的实现原理
开发语言·c++
Liuxu09035 小时前
力扣 —— 跳跃游戏
算法·leetcode·游戏·力扣
TravisBytes5 小时前
深入掌握 Protobuf 与 RPC 的高效结合:实现C++工程中的高效通信
c++·分布式·rpc
t_181377845545 小时前
抖去推数字人---技术本地服务器技术开发步骤
算法·php·音视频