矩形覆盖-剑指Offer(Java语言)

题目描述

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

思路

若一共有方法为f(n),主要分为两种情况

1.若最后一块是竖着摆放

则前面n-1个2*1的小矩形摆放在前面2*(n-1)的大矩形里一共有f(n-1)种方法

2.若最后一块横着摆放

则最右边需要两块,故左边为前面n-2个2*1的小矩形摆放在前面2*(n-2)的大矩形里一共有f(n-2)种方法

故f(n)=f(n-1)+f(n-2)为斐波那契额数列

有f(1)=1,f(2)=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 a=1,b=2,c=0;
        for(int i=3;i<=target;i++){
            c=a+b;
            a=b;
            b=c;
        }
        return c;
    }
}

可以参考之前的博客https://blog.csdn.net/ChaunceyChen/article/details/87899953

猜你喜欢

转载自blog.csdn.net/ChaunceyChen/article/details/87900658
今日推荐