问题
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?
Example
Given an example n=3 , 1+1+1=2+1=1+2=3
return 3
分析
费布那齐数列问题。对第n项来说,前边可能是从n-2一次走两阶过来的,也可能是从n-1一次走一阶过来的。所以F(n)=F(n-1)+F(n-2)。
另外需要注意,如果可以用循环也可以用递归的,尽量使用循环。递归在空间和时间两个方面都没有循环效果好。
代码
/**
* @param n: An integer
* @return: An integer
*/
public int climbStairs(int n) {
// write your code here
int res=1;
int last=1;
int lastLast=1;
for(int i=2;i<=n;i++){
res=last+lastLast;
lastLast=last;
last=res;
}
return res;
}
}