【leetcode解题】爬楼梯

题目:


image.png

仔细一思考,首先1阶和2阶已经是确定的,3阶及以上分成两种情况:
1、爬完它的上一台阶,再爬一阶
2、爬完它的上两个台阶,再爬两阶
所以,本质上,这就是个斐波那契数列。
我迅速写了个递归,一提交,超出时间限制,一分析果然,这么递归,同一个数字,会重复计算好多次


image.png

然后优化了代码,以下是最终版:
class Solution {
public:
    int climbStairs(int n) {
        if (n == 1) return 1;
        if (n == 2) return 2;
        int tmp0 = 0, tmp1 = 0;
        for (int i = 1; i <= n; i++) {
            if (i == 1) tmp0 = 1;
            else if (i == 2) tmp1 = 2;
            else {
                tmp1 = tmp0 + tmp1;
                tmp0 = tmp1 - tmp0;
            } 
        }
        return tmp1;
    }
};

提交结果:通过。执行用时:8ms。


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。