剑指Offer(十)矩形覆盖(Java版 )

一、题目描述

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

二、题目分析

第一块有两种方式:横着放和竖着放
横着放对应方法为f(n-2);
竖着放下一步的放方法为f(n-1);
所以总的放的方法为f(n)=f(n-1)+f(n-2);
画一张图来描述下:
这里写图片描述

三、方法一:递归

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

运行结果:
这里写图片描述

三、方法二:循环

public class Solution {
    public int RectCover(int target) {
        if( target == 0 ) return 0;
        if( target == 1 ) return 1;
        if( target == 2 ) return 2;
        int pre = 1;
        int now = 2;
        int result = 0;
        for( int i = 3;i <= target;i++ )
        {
            result = pre + now;
            pre = now;
            now = result;
        }
        return result;
    }
}

运行结果:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41835916/article/details/80666417