【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;
}

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

相关推荐
fs哆哆4 小时前
在VB.net中一维数组,与VBA有什么区别
java·开发语言·数据结构·算法·.net
johnZhangqi4 小时前
深圳大学-计算机信息管理课程实验 C++ 自考模拟题
java·开发语言·c++
Sally璐璐4 小时前
Go语言变量声明与初始化详解
java·开发语言·golang
luofeiju4 小时前
交叉编译笔记
开发语言
StudyWinter5 小时前
【C++】仿函数和回调函数
开发语言·c++·回调函数·仿函数
C4程序员5 小时前
北京JAVA基础面试30天打卡14
java·开发语言·面试
黑客影儿6 小时前
Go特有的安全漏洞及渗透测试利用方法(通俗易懂)
开发语言·后端·安全·web安全·网络安全·golang·系统安全
你好,我叫C小白6 小时前
C语言 常量,数据类型
c语言·开发语言·数据类型·常量
小红帽2.07 小时前
从ioutil到os:Golang在线客服聊天系统文件读取的迁移实践
服务器·开发语言·golang
Zafir20248 小时前
Qt实现TabWidget通过addTab函数添加的页,页内控件自适应窗口大小
开发语言·c++·qt·ui