编程语言
首页 > 编程语言> > java算法:青蛙跳台阶问题(经典算法)

java算法:青蛙跳台阶问题(经典算法)

作者:互联网

问题

解决

class Solution {
    static int MOD=1000000007;
    public int numWays(int n) {
        // **3.动态规划**:穷举可以发现f(n)=f(n-1)+f(n-2);确定边界:f(0)=1,f(1)=1,f(2)=2;最佳解f(n)=f(n-1)+f(n-2);得到最终解决方案(边界+最优解)
        if(n==0) return 1;
        if(n<=2) return n;
        int a=1,b=1,c=2;
        for(int i=3;i<=n;i++){      //可以近似看作一个不断移动的数组,后面一个值等于前两个相加
            b=a;
            a=c;
            c=(a+b)%MOD;
        }                           
        return c;
    }
}
// 青蛙跳台阶:
// 递归、带备忘录的递归、动态规划

// **1.递归**
//   public int numWays(int n) {
//         if(n==1) return 1;
//         if(n==2) return 2;
//         return numWays(n-1)+numWays(n-2);
// }


//**2. 带备忘的递归(减少了递归过程中的重复操作)**
    // static int MOD=1000000007;
    // HashMap<Integer,Integer> map=new HashMap();     //定义hashmap应该放在方法外面,在不方法每次调用都会创一个新的hashmap
    // public int numWays(int n) {
    //         if(n==0) return 1;
    //     if(n<=2) return n;
    //     if(map.containsKey(n))          //检查 hashMap 中是否存在指定的 key 对应的映射关系。
    //     {
    //         return map.get(n);       //如果备忘里存在就直接返回。
    //     }else{
    //         map.put(n,(numWays(n-1)+numWays(n-2))%MOD);
    //         return map.get(n);
    //     }
    //     // return numWays(n-1)+numWays(n-2);
    // }

总结

标签:台阶,递归,int,青蛙,跳上,算法,java,动态
来源: https://www.cnblogs.com/zhangsanM/p/16463154.html