题目描述:
有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶、3阶。请实现一个方法,计算小孩有多少种上楼的方式。为了防止溢出,请将结果Mod 1000000007
给定一个正整数int n,请返回一个数,代表上楼的方式数。保证n小于等于100000。
测试样例1:
1
返回:1
测试样例2:
3
返回:4
测试样例3:
4
返回:7
解题思路:在踏上最后一集台阶的时候有三种情况,第一种就是站在倒数第二级台阶然后走一步直接到最后一级台阶,第二种情况就是站在倒数第三级台阶跨一步直接到最后一级台阶,第三种情况就是站在倒数第四级台阶走一步直接到达最后一级台阶,将这三种情况加起来就是所有的能到达最后一级台阶的可能数,前三级台阶的可能性可以手动列举出来,然后直接通过数组来完成就可以了。
代码如下:
/**
* Created with IntelliJ IDEA
* Description:
* User:Light_Long
* Date:2019-08-09
* Time:10:55
*/
public class GoUpstairs {
public int countWays(int n) {
// write code here
int[] arr = new int[100000];
arr[0] = 0;
arr[1] = 1;
arr[2] = 2;
arr[3] = 4;
if(n <= 0) {
return 0;
}
if(n <= 3) {
return arr[n];
}
for (int i = 4; i <= n; i++) {
arr[i] = ((arr[i-1] + arr[i-2]) % 1000000007 + arr[i-3]) % 1000000007;
}
return arr[n];
}
}