一、问题描述
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];
}
}
本文探讨了经典的爬楼梯问题,并将其映射为斐波那契数列求解过程。通过两种不同的算法实现,即带有缓存的递归方法和迭代方法,有效地解决了问题并避免了超时错误。
333

被折叠的 条评论
为什么被折叠?



