【LeetCode算法】第70题:爬楼梯

目录

一、题目描述

二、初次解答

三、官方解法

四、C++写法

五、总结


一、题目描述

二、初次解答

1. 思路:通过计算n=1,2,3,4,5发现结果为1,2,3,5,8。这不就是斐波那契数列!因此,想到直接用递归方法求解,但是递归方法需要开辟递归栈空间,浪费了内存空间。接着,想到类似滑动窗口的方法:用一个i来指向数字下标,用s和e分别指向i-1和i-2的结果,那么当i不断往后移动时,s和e也不断往后移动。当i>n时结束循环返回e即可。以n=4为例,执行过程如下图所示:

2. 代码:

int climbStairs(int n) {
    if (n==1 || n==2)
        return n;
    int s=1,e=2,tmp;
    for(int i=3;i<=n;++i){
        tmp=s;
        s=e;
        e+=tmp;
    }
    return e;
}

3. 优点:实现简单,执行速度快且空间消耗少。

4. 缺点:暂无。

三、官方解法

官方的动态规划解法与上述解法一致,还有其他更加复杂的解法,此处不展开阐述。

四、C++写法

class Solution {
public:
    int climbStairs(int n) {
        if (1 == n || 2 == n)
            return n;
        int i = 1, j = 2, ret = 0;
        for (int k = 3; k <= n; ++k) {
            ret = i + j;
            i = j;
            j = ret;
        }
        return ret;
    }
};

五、总结

对于未知的迭代问题,可以枚举几个例子寻找规律。遇到斐波那契数列,可以使用滑动窗口方法来求解。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值