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

   日期:2020-09-25     浏览:82    评论:0    
核心提示:剑指 Offer 10- II. 青蛙跳台阶问题一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。同斐波那契数列,注意初始值的不同!方法一:递归,超时 public static int numWays(int n){ if(n < 1) return 1; if(n < 3) return n;

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

一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。

答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。


同斐波那契数列,注意初始值的不同!

方法一:递归,超时

    public static int numWays(int n){ 
        if(n < 1) return 1;
        if(n < 3) return n;
        else return (numWays(n-2) + numWays(n-1))%1000000007;
    }

方法二:迭代数组

   public static int numWaysTwo(int n){ 
        int[] dp = new int[n+1];
        //dp[0] = 1;
        if(n <= 1)return 1;
        dp[1] = 1;
        dp[2] = 2;
        for(int i = 3; i <= n; i++){ 
            dp[i] = dp[i-1] + dp[i-2];
            dp[i] %=1000000007;
        }
        return dp[n];
    }

可以思考一下为什么不dp[0] = 1?
方法三:map存取

    public static int numWaysThree(int n){ 
        HashMap<Integer,Integer> map = new HashMap<>();
        if(n < 1) return 1;
        if(n < 3) return n;
        if(!map.containsKey(n)){ 
            map.put(n,numWaysThree(n-1) + numWaysThree(n-2));
        }
        return map.get(n);
    }
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服