力扣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;
    }
};
相关推荐
智者知已应修善业21 分钟前
【求中位数】2024-1-23
c语言·c++·经验分享·笔记·算法
地平线开发者1 小时前
PTQ 量化数值范围与优化
算法·自动驾驶
sali-tec1 小时前
C# 基于halcon的视觉工作流-章68 深度学习-对象检测
开发语言·算法·计算机视觉·重构·c#
测试人社区-小明1 小时前
智能弹性伸缩算法在测试环境中的实践与验证
人工智能·测试工具·算法·机器学习·金融·机器人·量子计算
罗西的思考2 小时前
【Agent】MemOS 源码笔记---(5)---记忆分类
人工智能·深度学习·算法
GSDjisidi3 小时前
东京IT软件会社-(株)GSD|多种技术栈募集,高度人才+20分
开发语言·面试·职场和发展
qq_433554545 小时前
C++数位DP
c++·算法·图论
AshinGau5 小时前
Softmax 与 交叉熵损失
神经网络·算法
似水এ᭄往昔5 小时前
【C++】--AVL树的认识和实现
开发语言·数据结构·c++·算法·stl
栀秋6665 小时前
“无重复字符的最长子串”:从O(n²)哈希优化到滑动窗口封神,再到DP降维打击!
前端·javascript·算法