美文网首页
[算法练习] 青蛙跳

[算法练习] 青蛙跳

作者: afluy | 来源:发表于2020-05-04 13:54 被阅读0次

题目

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)

分析

台阶 解法
1 1
2 1,1 2
3 1,1 2,1 1,1,1
4 1,1,1 2,1,1 1 1,1,1,1 1,1,2 2,2
....

由上面可以看出第 N 次的解法数量是 N-1数量加上 N-2 数量
F(n) = F(n-1) + F(n-2)
和斐波那契数列类似, 可以用递归实现

代码实现

    /**
     * 暴力计算, 递归, 自上向下
     */
    @Test
    public void test() {
        int ret = JumpFloor(10);
        System.out.println("test: " + ret);
    }

    public int JumpFloor(int target) {
        if (target == 1) {
            return 1;
        }
        if (target == 2) {
            return 2;
        }
        return JumpFloor(target - 1) + JumpFloor(target - 2);
    }

  
    public int[] mCache = null;
    /**
     * 通过缓存优化计算耗时, 空间换时间, 自上向下
     */
    @Test
    public void test2() {
        int target = 10;
        mCache = new int[target + 1];
        int ret = JumpFloor2(target);
        System.out.println("test2: " + ret);
    }

    public int JumpFloor2(int target) {
        if (target == 1) {
            return 1;
        }
        if (target == 2) {
            return 2;
        }
        // 缓存计算结果, 如果未设值就赋值, 如果有就直接返回, 不需要再重复计算
        if (mCache[target] == 0) {
            mCache[target] = JumpFloor(target - 1) + JumpFloor(target - 2);
        }
        return mCache[target];
    }

    /**
     * 动态规划, 自下向上
     */
    @Test
    public void test3() {
        int target = 10;
        int ret = JumpFloor3(target);
        System.out.println("tes3: " + ret);
    }

    public int JumpFloor3(int target) {
        int[] cache = new int[target + 1];
        cache[0] = 1;
        cache[1] = 1;
        for (int index = 2; index <= target; index++) {
            cache[index] = cache[index - 1] + cache[index - 2];
        }
        return cache[target];
    }

相关文章

  • [算法练习] 青蛙跳

    题目 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同...

  • 优化算法笔记(十六)混合蛙跳算法

    1. 混合蛙跳算法简介 (以下描述,均不是学术用语,仅供大家快乐的阅读)混合蛙跳算法(Shuffled Frog ...

  • 常见数据结构与算法题

    范畴:递归 1、青蛙跳台阶 青蛙跳台阶算法,每次可以跳1级或两级,请问有n级台阶,有多少种算法,递归和非递归如何写...

  • 青蛙跳台阶问题算法分析与设计Readme

    学号:1753910 姓名:马思腾 简介 青蛙跳台阶问题是算法设计中较基础但十分重要的问题之一 问题题干如下: 青...

  • 算法 青蛙跳台阶

    用斐波那契数列解决。直接用递归会超时,所以用list将前面计算过的数值保存下来。这样后面需要计算时直接取值就可以了...

  • 荣耀算法题-青蛙跳

    青蛙跳 题目描述: 给出n阶台阶,每次只可以前进一步或者两步,中途有一次机会可以后退一步,这次机会也可以不使用,到...

  • 撒欢

    青牛卧水眠,牧童骑背欢。 笛声吹柳绿,蛙跳荷叶前。

  • 算法---青蛙跳台阶问题

    一只青蛙可以一次跳一级台阶,也可以一次跳两级台阶,如果青蛙要跳上n级台阶,共有多少钟跳法? 问题分析 当青蛙即将跳...

  • 【每日算法】青蛙跳台阶

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种...

  • 看桃花

    当熟麦子青不了,山下桃花开正好。水打荷叶蛙跳岸,杏李园中身道销。

网友评论

      本文标题:[算法练习] 青蛙跳

      本文链接:https://www.haomeiwen.com/subject/xpoeghtx.html