剑指offer:面试题9.3——矩形覆盖问题

剑指offer:面试题9.3——矩形覆盖问题

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

class Solution {
public:
    int rectCover(int number) {
        //设覆盖2*n有f(n)种方法。当覆盖最左侧矩形时,有两种方法,一种横着一种竖着
        //若竖着覆盖,则剩下的矩形有f(n-1)种方法
        //若横着覆盖,则下面横着的矩形部分也必须横着的方式覆盖,设下(n-2)*2个矩形,有f(n-2)种覆盖方法
        //因此f(n)=f(n-1)+f(n-2);是一个递归问题
        if(number==1)return 1;
        if(number==2)return 2;
        int fs=1;
        int fl=2;
        int sum=0;
        int i;
        for(i=3;i<=number;i++)
        {
            sum=fl+fs;
            fs=fl;
            fl=sum;
        }
        return sum;
    }
};

猜你喜欢

转载自blog.csdn.net/MereX/article/details/89432096