矩形覆盖

【题目描述】

    我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
 
【解题思路】
    我们不妨把2*n的覆盖方法记作f(n)。假设从左向右进行覆盖。最后一次用一个1*2的小矩形去覆盖大矩形最右边时,有两种选择,竖着放或者横着放。当竖着放的时候,左边还剩下2*(n-1)的区域,这种情形下的覆盖方法记作f(n-1);接下来考虑横着放的情况。当一个1*2的小矩形去覆盖大矩形右下方的时候,其上方还需要横着放置一个1*2的小矩形,但其放置方法是固定的,只有一种方法,这时左边剩下2*(n-2)的区域需要覆盖,这种情形下的覆盖方法记作:f(n-2)。因此,我们得到递推公式:f(n)=f(n-1)+f(n-2)。仍然是我们熟悉的斐波那契数列题,代码几乎是呼之欲出了。
【代码实现】
 1 class Solution {
 2 public:
 3     int rectCover(int number) {
 4         if(number<=1)
 5             return 1;
 6         int target=0;
 7         int first=1;
 8         int second=1;
 9         for(int i=2;i<=number;++i)
10         {
11             target=first+second;
12             first=second;
13             second=target;
14         }
15 
16         return target;
17     }
18 };
 
原文地址:https://www.cnblogs.com/lou424/p/5047684.html