一,问题描述
1,有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或者二级,要走上M级,共有多少走法?其中M取值范围为1~100,结果值须要Mod 1000000007的值。java
例如 输入 3
输出 2web
输入 100
输出687995182编程
2,解题思路
这题是斐波拉契问题,即f(n)=f(n-1)+f(n-2)。若是使用递归的时候,n取100时,会超时。所以,咱们使用动态规划方法来作。svg
二,AC了的程序spa
import java.util.*;
public class Test2{ //京东的编程题
public int countWays(int n)
{
if(n<1)//若是取值范围为-1,则直接返回-1.
{
return -1;
}
int []data=new int[n+1];
for(int i=1;i<=n;i++) {
if (i== 1) {
data[1] = 0;
}
else if (i== 2) {
data[2] = 1;
}
else if (i == 3) {
data[3] = 2;
}
else {
data[i] = (data[i - 1] + data[i - 2]) % 1000000007;
}
}
return data[n];
}
public static void main(String []args)
{
Test2 test=new Test2();
Scanner scan=new Scanner(System.in);
int n=scan.nextInt();
int sum=test.countWays(n);
System.out.println(sum);
}
}