Java 斐波拉契高级问题(上台阶的问题)

一,问题描述
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);

    }
}