每日一练:爬楼梯

70. 爬楼梯 - 力扣(LeetCode)

题目要求:

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

这是一道简单的动态规划题,要得到达到第 i 个阶梯的方法总数,就需要得到到达它的上一步 i-1和 i-2 的方法总数,即:dpi = dpi-1+dpi-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);
    }
};
相关推荐
倒头就睡的小比特5 天前
算法竞赛C++常用的STL
c++·算法
weilx12345 天前
C++笔记-文件IO-<fcntl.h>
c++
小羊没烦恼!5 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
猎头南楼5 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
Smileyqp沛沛5 天前
前端?C++ ?较大差异基础罗列
c++·基础·前端转c++
C语言小火车5 天前
C/C++ 为什么需要编译器?
开发语言·c++
旖旎夜光5 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
wzdark5 天前
大规模并行计算中的负载均衡算法研究4
算法
吞下星星的少年·-·5 天前
C++ 萌新语法入门篇
c++·算法比赛
Because_of_Her15 天前
并查集-听课笔记
笔记·算法·并查集