矩形覆盖

2018-05-22  本文已影响0人  夏臻Rock

题目描述

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

分析:

对于2*n的目标矩形,我们在进行覆盖的时候,可以第一块竖着放,也可以第一块横着放。

代码:

时间复杂度O(N),空间复杂度O(N)

public class Solution {
    public int RectCover(int target) {
        if(target<=0) return 0;
        else if(target<=2) return target;
        int[] num = new int[target+1];
        num[0]=0;
        num[1]=1;
        num[2]=2;
        for(int i=3;i<target+1;i++){
            num[i]=num[i-1]+num[i-2];
        }
        return num[target];
    }
}

时间复杂度O(N),空间复杂度O(1)

public class Solution {
    public int RectCover(int target) {
        if(target<=0) return 0;
        else if(target<=2) return target;
        int result =0;
        int pre1=1;
        int pre2=2;
        for(int i=3;i<target+1;i++){
            result = pre1+pre2;
            pre1=pre2;
            pre2=result;
        }
        return result;
        
    }
}
上一篇下一篇

猜你喜欢

热点阅读