力扣70. 爬楼梯

动态规划

  • 思路:
    • 使用递归比较容易理解, f(n) = f(n - 1) + f(n - 2);
      • 到剩余1级台阶有 f(n - 1),到剩余2级台阶有 f(n-2);
      • 边界情况是
        • n = 0, f(0) = 1
        • n = 1, f(1) = 1
        • n = 2, f(2) = 2
      • 递归代码实现:
cpp 复制代码
class Solution {
public:
    int climbStairs(int n) {
        if (n == 0) {
            return 1;
        }
        if (n == 1) {
            return 1;
        }

        if (n == 2) {
            return 2;
        }

        return climbStairs(n - 1) + climbStairs(n - 2);
    }
};
  • 很遗憾的事 n = 44 时,反馈超时了;所以,需要将递归变换一下;
  • 使用两个变量来缓存前两种情形的结果,根据转移方程 f(n) = f(n - 1) + f(n - 2),迭代 n 次即可;
cpp 复制代码
class Solution {
public:
    int climbStairs(int n) {
        int p = 0;
        int q = 0;
        int result = 1;
        
        for (int step = 1; step <= n; ++step) {
            p = q;
            q = result;
            result = p + q;
        }

        return result;
    }
};
相关推荐
初晴や1 小时前
【C++】图论:基础理论与实际应用深入解析
c++·算法·图论
李泽辉_1 小时前
深度学习算法学习(五):手动实现梯度计算、反向传播、优化器Adam
深度学习·学习·算法
李泽辉_1 小时前
深度学习算法学习(一):梯度下降法和最简单的深度学习核心原理代码
深度学习·学习·算法
꧁Q༒ོγ꧂1 小时前
算法详解---大纲
算法
hqiangtai1 小时前
Android 高级专家技术能力图谱
android·职场和发展
m0_603888711 小时前
Scaling Trends for Multi-Hop Contextual Reasoning in Mid-Scale Language Models
人工智能·算法·ai·语言模型·论文速览
Xの哲學1 小时前
Linux io_uring 深度剖析: 重新定义高性能I/O的架构革命
linux·服务器·网络·算法·边缘计算
comli_cn1 小时前
残差链接(Residual Connection)
人工智能·算法
Aaron15882 小时前
基于VU13P在人工智能高速接口传输上的应用浅析
人工智能·算法·fpga开发·硬件架构·信息与通信·信号处理·基带工程