【C语言】【Leetcode】70. 爬楼梯

文章目录

  • 题目
  • [思路:简单递归 > 动态规划](#思路:简单递归 > 动态规划)

题目

链接: link

思路:简单递归 > 动态规划

这题类似于斐波那契数列的算法,结果其实就是到达前一步和到达前两步的方法之和,一直递归到n=1n=2时就行了,但是这种算法有个缺点就是递归的耗时太长了容易报错

c 复制代码
int climbStairs(int n) {
    if (n == 1)
        return 1;
    else if (n == 2)
        return 2;
    else
        return climbStairs(n - 1) + climbStairs(n - 2);
}

所以这里我们可以尝试使用动态规划的方法,就是说这里我们是知道目标数的,所以我们可以直接利用for循环从1和2开始一直循环下去,使 f(n) = f(n-1) + f(n-2) 下去,比上面的递归的空间复杂度就小了很多,只有O(n),同时因为没有额外创建循环空间,所以最后空间复杂度是O(1)

c 复制代码
int climbStairs(int n) {
    int p = 0;
    int q = 0;
    int s = 1;
    for (int i = 1; i <= n; i++) {
        p = q;
        q = s;
        s = p + q;
    }
    return s;
}

其实这里还可以用数学的方法做,但是有带你复杂就不说了,有兴趣可以去力扣官方解题思路里看看。

相关推荐
程序员-King.5 小时前
day158—回溯—全排列(LeetCode-46)
算法·leetcode·深度优先·回溯·递归
星火开发设计6 小时前
C++ 数组:一维数组的定义、遍历与常见操作
java·开发语言·数据结构·c++·学习·数组·知识
TTGGGFF6 小时前
控制系统建模仿真(一):掌握控制系统设计的 MAD 流程与 MATLAB 基础运算
开发语言·matlab
2501_944424127 小时前
Flutter for OpenHarmony游戏集合App实战之贪吃蛇食物生成
android·开发语言·flutter·游戏·harmonyos
Lhuu(重开版8 小时前
JS:正则表达式和作用域
开发语言·javascript·正则表达式
csdn_aspnet8 小时前
C 语言的优雅回归:从零手造数据结构
c语言·数据结构
仙俊红8 小时前
Java Map 家族核心解析
java·开发语言
浅念-8 小时前
C语言小知识——指针(3)
c语言·开发语言·c++·经验分享·笔记·学习·算法
想放学的刺客9 小时前
单片机嵌入式嵌入式试题(第16期):硬件可靠性设计与复杂状态机架构设计
c语言·stm32·单片机·嵌入式硬件·物联网
code_li9 小时前
聊聊支付宝架构
java·开发语言·架构