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?
Note: Given n will be a positive integer.
首先,假设有n节台阶,能到达n的只有两种情况,跨1节台阶或者跨2节台阶。n-1到n只需要迈1节台阶,n-2到n只需要迈2节台阶,所以等式关系就出来了:T(n) = T(n-1) + T(N-2),也就是Fibonacci函数。那么可以根据Fibonacci来解题了,代码如下:
public class Solution {
public int climbStairs(int n) {
if (n <= 0) {
return 0;
}
if (n == 1) {
return 1;
}
if (n == 2) {
return 2;
}
int onestair2top = 2;
int twostairs2top = 1;
int allsteps = 0;
for (int i = 2; i < n; i ++) {
allsteps = onestair2top + twostairs2top;
twostairs2top = onestair2top;
onestair2top = allsteps;
}
return allsteps;
}
}