[编程题][剑指 Offer 10- II. 青蛙跳台阶问题]

5、剑指 Offer 10- II. 青蛙跳台阶问题

image-20200619232912389

动态规划

image-20200619224033044

详细题解:https://leetcode-cn.com/problems/qing-wa-tiao-tai-jie-wen-ti-lcof/solution/mian-shi-ti-10-ii-qing-wa-tiao-tai-jie-wen-ti-dong/

参考2:https://leetcode-cn.com/problems/qing-wa-tiao-tai-jie-wen-ti-lcof/solution/javaqing-wa-tiao-tai-jie-he-fei-bo-na-qi-shu-lie-t/

方法1:斐波那契递归

//方法1:普通递归[不通过,时间超限制]
    public int numWays1(int n) {
        if(n==0 || n==1){
            return 1;
        }
        if (n==2){
            return 2;
        }else {
            return (numWays(n-1)+numWays(n-2))%1000000007;
        }
    }

时间复杂度高,不通过,逻辑没问题

方法2:改进非递归形式解决斐波那契

//方法1:普通递归[不通过,时间超限制]
    public int numWays1(int n) {
        if(n==0 || n==1){
            return 1;
        }
        if (n==2){
            return 2;
        }else {
            return (numWays(n-1)+numWays(n-2))%1000000007;
        }
    }

方法3:使用数组来提高效率(动态规划)

image-20200619234642246

//方式3:使用数组来提高效率[最优]  动态规划
    public static int numWays(int n) {
        //对于n=1和n=0的情况直接返回
        if (n==0 || n==1){
            return 1;
        }
        //n>=2的情况在此处理
        int[] ints = new int[n + 1];
        ints[0] = 1;
        ints[1] = 1;
        for (int i = 1; i < n; i++) {
            ints[i+1] = ints[i]+ints[i-1];  //借助的是f(n+1) = f(n)+f(n-1)
            ints[i+1] %=1000000007;
        }
        return ints[n];
    }
原文地址:https://www.cnblogs.com/jiyongjia/p/13191847.html