—————–>>>>>> 题目来源<<<<<<———————
题目描述
有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶、3阶。请实现一个方法,计算小孩有多少种上楼的方式。为了防止溢出,请将结果Mod 1000000007
给定一个正整数int n,请返回一个数,代表上楼的方式数。保证n小于等于100000。
测试样例:
1
返回:1
解题思路:这题用的是动态规划的解法。由题可知,到目标阶梯的方法共有三种:
1.由n-1到达,走了一步。
2.由n-2到达,走了两步。
3.由n-3到达,走了三步。
那么,很明显,这三种到达目标阶梯的总和就是到达目标阶梯的所有可能性。
直接贴代码。
public static int countWays(int n) {
int a[] = { 1, 1, 2 };//代表 0 1 2 个阶梯的可能性
if (n < 3) {
return a[n];
}
int i = 3;
for (; i <= n ; i++) {
int x = 0;
for (int j = 0; j < 3; j++) {
x += a[(i + j) % 3];
x %= 1000000007;
}
a[i % 3] = x;
}
return a[(i - 1) % 3];
}
public static void main(String[] args){
Scanner input=new Scanner(System.in);
int n=input.nextInt();
System.out.println(countWays(n));
}