矩形覆盖

来源:互联网 发布:苹果cms整合ckplayerx 编辑:程序博客网 时间:2024/05/18 06:43

题目

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

思路

组成2*1的矩形的方法有1种;
组成2*2的矩形的方法有2种,分别是横着两块2*1的矩形或者竖着两块2*1的矩形;
从n = 3开始,组成2*n的矩形的方法数可以看成组成2*(n - 1)的矩形的情况上再横一块,或者在组成2*(n - 2)的矩形上竖两块,因此组成2*n的矩形的方法总数等于组成2*(n - 1)和组成2*(n - 2)的方法总数的和。

参考代码

class Solution{public:    int rectCover(int number)    {        if (number <= 2) return number;        int pre1 = 1, pre2 = 2, now;        for (int i = 3; i <= number; ++i)        {            now = pre1 + pre2;            pre1 = pre2;            pre2 = now;        }        return now;    }};