leetcode【动态规划】-----70. Climbing Stairs(爬楼梯)

1、题目描述

2、分析

        输入一个n,问爬上n层台阶,有多少种方法,一次可以爬一个或者两个。很明显这其实是一道斐波那契数列的变形,菲波那切数列在我们之前通常作为递归的理解,但是如果输入的数字比较大,递归很容易造成爆栈原因就是递归层次太多。所以在这里我们意识到这个问题是斐波那契之后,一定不要选择递归的做法。而是使用一个变量来保存中间变量,这样其实就是将这个问题,变成了动态规划的做法。之前总结的动态规划的知识。(https://blog.csdn.net/zl6481033/article/details/84585115)。

3、代码

class Solution {
public:
    int climbStairs(int n) {
        if(n==1) return 1;
        if(n==2) return 2;//这一句可以不加
        int first=1;
        int second=2;
        for(int i=3;i<=n;++i){
             int newway=second+first;
             first=second;
             second=newway;
        }
        return second;
        
    }
};

4、相关知识点

        动态规划的简单使用。涉及到斐波那契的使用上面的代码应该就已经可以了,时间复杂度和空间复杂度要更小的话就需要更难一点的数学知识。

posted @ 2019-04-22 17:54  吾之求索  阅读(143)  评论(0)    收藏  举报