矩阵覆盖

1.题目

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

2.思路

2*1的矩阵覆盖2*8的矩阵的方法f(8):用第一个1*2矩阵覆盖2*8矩阵的最左边时有竖着或横着两种方法。
当1*2矩阵竖着放时,2*8矩阵右边剩余2*7的区域,覆盖2*7区域的方法记为f(7);
当1*2矩阵横着放时,2*8左上角放一个1*2的矩阵,则2*8左下角必须放一个1*2的矩阵,2*8右边剩余2*6的区域,覆盖2*6区域的方法记为f(6)。
结论:用1*2的矩阵覆盖2*8的矩阵的方法归纳为f(8) = f(7)+f(6)

简单的来说:求1 2 3 5 8 13 ….这个序列

class Solution {
public:
    int rectCover(int number) {
        if(number<=0)
            return 0;
        if(number<3)
            return number;

        int a=1;
        int b=2;
        int c=0;
        for(int i=3;i<=number;++i){
            c=a+b;
            a=b;
            b=c;
        }
        return c;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_35433716/article/details/81837313
今日推荐