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

来源:互联网 发布:2017年适合做淘宝客吗 编辑:程序博客网 时间:2024/06/04 18:53

一,问题描述
1,有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或者二级,要走上M级,共有多少走法?其中M取值范围为1~100,结果值需要Mod 1000000007的值。

例如 输入 3
输出 2

输入 100
输出687995182

2,解题思路
这题是斐波拉契问题,即f(n)=f(n-1)+f(n-2)。如果使用递归的时候,n取100时,会超时。因此,我们使用动态规划方法来做。

二,AC了的程序

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);    }}
1 0
原创粉丝点击