一、问题描述
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?
二、问题分析
此问题实际为斐波那契数列问题。注意不能使用递归算法,会报超时错误,需要采用缓存中间结果的策略。
三、算法代码
代码一:
public class Solution {
HashMap<Integer, Integer> result = new HashMap<Integer, Integer>();
public int climbStairs(int n) {
if(n <= 2){
return n;
}
if(result.containsKey(n)){
return result.get(n);
}
result.put(n, climbStairs(n - 1) + climbStairs(n - 2));
return result.get(n);
}
}
代码二:
public class Solution {
public int climbStairs(int n) {
if(n <= 2){
return n;
}
int [] result = new int[n];
result[0] = 1;
result[1] = 2;
for(int i = 2; i < n; i++){
result[i] = result[i - 1] + result[i - 2];
}
return result[n - 1];
}
}