美文网首页
算法(10)矩形覆盖

算法(10)矩形覆盖

作者: 猪_队友 | 来源:发表于2018-11-07 16:55 被阅读0次

    题目描述

    我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?

    看到这个题感觉有点熟悉啊,仔细一想不正是跳台阶的问题吗?一次一个或者两个,这个本质也是啊。一个的相当于竖着的,两个的相当于横着放。

    具体可以参照跳台阶

    递归方法

     public static int JumpFloor(int target) {
            //最后没有了
            if (target == 0) {
                return 0;
            }
            //最后剩一个
            if (target == 1) {
                return 1;
            }
            //最后剩两个
            if (target == 2) {
                return 2;
            }
    
            return JumpFloor(--target) + JumpFloor(--target);
    
        }
    

    for循环方法

     public static int JumpFloor1(int target) {
            //最后没有了
            if (target == 0) {
                return 0;
            }
            //最后剩一个
            if (target == 1) {
                return 1;
            }
            //最后剩两个
            if (target == 2) {
                return 2;
            }
            
            int one = 1;
            int two = 2;
            int result = 0;
            for (int i = 2; i < target; i++) {
                result = one + two;
                one = two;
                two = result;
            }
            return result;
            
        }
    

    相关文章

      网友评论

          本文标题:算法(10)矩形覆盖

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