您的位置:首页 > 其它

矩形覆盖

2015-12-15 11:40 309 查看

【题目描述】

我们可以用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)。仍然是我们熟悉的斐波那契数列题,代码几乎是呼之欲出了。
【代码实现】

class Solution {
public:
int rectCover(int number) {
if(number<=1)
return 1;
int target=0;
int first=1;
int second=1;
for(int i=2;i<=number;++i)
{
target=first+second;
first=second;
second=target;
}

return target;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: