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

[算法练习] 青蛙跳

作者: 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];
        }
    

    相关文章

      网友评论

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

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