分析题目可知,
台阶数 方式
1 1
2 2
3 3
4 5
5 8
》》 》》
其方式组合数为: 1 2 3 5 8 13.。。为一个斐波那契数列。
1. 递归法(该方法超时)
public int climbStairs(int n) {
if(n==1 || n==0){
return 1;
}
return climbStairs(n-1) + climbStairs(n-2);
}
2. 迭代法(使用数组存储中间值)
public int climbStairs(int n) {
int[] steps = new int[n+1];
steps[0] = steps[1] = 1;
for(int i=2;i<=n;i++){
steps[i] = steps[i-1] + steps[i-2];
}
return steps[n];
}
3. 迭代法改进,使用两个中间变量代替数组
public int climbStairs(int n) {
if (n == 1) {
return 1;
}
// 1, 1,2,3,5,8
int last = 0;
int mid = 1;
int first = 1;
//let the stair from 2
for (int i = 2; i <= n; i++) {
last = mid + first;
first = mid;
mid = last;
}
return last;
}