//方法一:递归版
//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;
}
};