题目:
分析:题目情景很简单,一个爬楼梯的问题,那么这个问题抛开编程来说,放在实际中应该怎么数呢?根据要求,每次可以爬1或2个台阶,那么数的时候不外乎第一步爬1个还是2个,再把两种情况各自余下的问题进行求解,放到这里就是一种动态规划的思想,当前爬到第几级台阶,除去第一步爬1个或2个剩下有几个台阶,而剩下的台阶数在之前已经求过了直接拿来用,一种自底向上的做法
代码:
class Solution {
public int climbStairs(int n) {
//小于等于3个台阶直接可以返回了
if(n <= 3){
return n;
}else{
int[] paths = new int[n+1];
//初始化前3个台阶
paths[1] = 1;
paths[2] = 2;
paths[3] = 3;
//从第4个台阶开始
for(int i = 4; i < n + 1; i++){
paths[i] = paths[i-1] + paths[i-2];
}
return paths[n];
}
}
}