You are climbing a stair case. It takes n steps to reach to the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
f (n) = f (n-1) + f (n-2),其中f(0)=1,f(-1)=0
class Solution {
public:
int climbStairs(int n) {
if(n==0)
return 0;
int prev=0, cur=1;
for(int i=1;i<=n;i++)
{
int temp=cur;
cur+=prev;
prev=temp;
}
return cur;
}
};
Fibonacci Sequence计算公式
class Solution {
public:
int climbStairs(int n) {
double s=sqrt(5);
return floor((pow((1+s)/2,n+1)-pow((1-s)/2,n+1))/s);
}
};