有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶,2阶或3阶。实现一个方法,计算小孩有多少种上楼梯的方式。
分析:这是个动态规划问题。
状态: f(i) 表示上到第 i 阶有多少种上楼梯方式,
状态转移方程:f(i) = f(i-1)+f(i-2)+f(i-3)。
class Solution{
public int step(int n){
if(n<=0) return 0;
if(n==1) return 1;
if(n==2) return 2;
if(n==3) return 4;
int[] steps = new int[n];
steps[0] = 1;
steps[1] = 2;
steps[2] = 4;
for(int i=3; i<n; i++){
steps[i] = steps[i-1]+steps[i-2]+steps[i-3];
}
return steps[n-1];
}
}