矩形覆盖问题

来源:互联网 发布:淘宝投诉盗图原始图片 编辑:程序博客网 时间:2024/06/05 08:20

问题:

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

思路分析:

看到这个问题,首先有点蒙。但是我注意到它的举行是2*1的,而且大矩形是2*n的

我就联系之前做的青蛙跳台阶的问题,青蛙一次可以调1阶或者2阶,对照这个题

大矩形可以由小矩形横着放也就是对应的2,竖着放也就是对应的1,其实无论如何只有两种选择不是1就是2

就是从原来的已经占据了大矩形2*(n-1)的再竖放,或者是2*(n-2)再横放。

符合斐波那契数列的特点。

但是注意到当n = 0是,只有0中;

当n = 1时,只有1种;

当n = 2时,有两种。之后的就具有斐波那契数列的特点了。


部分代码:

public int RectCover(int target) {
if(target == 0){
            return target;
        }
        if(target == 1){
            return target;
        }
        if(target == 2){
            return target;
        }
        if(target>2){
            return RectCover(target - 2) + RectCover(target - 1);
        }
        return 0;
    }


我自豪的夸夸我,好聪明啊,哈哈哈哈哈