leetcode 70 爬楼梯方法数 (本质和求第n个菲波那切数是一样的)

//方法一:递归版
//Time:O(2^n),Space:O(n)
class Solution 
{
public:
    int climbStairs(int n) 
    {
        if(n==0)
        {
            return 1;
        }
        else if(n==1)
        {
            return 1;
        }
        else
        {
            return climbStairs(n-1)+climbStairs(n-2);
        }
    }
};
//方法二:
//Time:O(n) Space:O(n)

class Solution 
{
public:
    int climbStairs(int n) 
    {
        if(0==n) return 1;
        if(1==n) return 1;

        vector<int> ret(n+1,-1);

        ret[0]=1;
        ret[1]=1;

        for(int i=2;i<=n;i++)
        {
            ret[i]=ret[i-2]+ret[i-1];
        }

        return ret[n];
    }
};
//方法三
//Time:O(n) Space:O(1)

class Solution 
{
public:
    int climbStairs(int n) 
    {
        if(0==n) return 1;
        if(1==n) return 1;

        int first=1;
        int second=1;

        for(int i=2;i<=n;i++)
        {
            int third=first+second;
            first=second;
            second=third;
        }

        return second;
    }
};

 

posted @ 2020-01-11 13:28  repinkply  阅读(3)  评论(0)    收藏  举报