剑指offer【10】【Java】:矩阵覆盖

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/NeptuneClouds/article/details/88623445

题目描述

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

解题思路

当n=1,只有一个21的矩形,因此只有一种方法,记作f(1)=1。
当n=2,两个2
1的矩形,有两种方式去覆盖这个矩形(正方形),竖放或横放,因此有两种方法,记作f(2)=2。
当n=3,仍只能采用横放或者竖放的方式去覆盖这个矩形,先考虑使用竖着放的方式,当竖着放的时候,由于已经覆盖了左边(假设是从左边开始覆盖的,右边一样)一个21的矩形,所以还有2个21的矩形,而这种情况我们已经在n=2的时候计算出来了,就是f(2);接下来考虑横放的情况,因为是横放,在水平方向已经覆盖了一个21的矩形,要想覆盖这由3个21组成的矩形,只能在水平方向覆盖的矩形下面继续覆盖一个,那么只剩下一个2*1的矩形,就是f(1)。即为f(3)=f(1)+f(2)。
当为n时,f(n) = f(1) + f(2) + f(3) + … + f(n-1)

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

猜你喜欢

转载自blog.csdn.net/NeptuneClouds/article/details/88623445