题目:我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
分析:2*n的大矩形可以分解成以下两步
先覆盖左边2*1的小矩形,再覆盖2*(n-1)的矩形
先覆盖左上2*1的小矩形,再覆盖2*(n-2)的矩形(左下2*1位置只有一种放法)
方法一:递归
class Solution {
public:
int rectCover(int number)
{
if(number<0)return 0;
if(number==1) return 1;
if(number==2) return 2;
return rectCover(number-1)+rectCover(number-2);
}
};
方法二:循环
class Solution {
public:
int rectCover(int number)
{
if(number<=0)return 0;
if(number==1) return 1;
if(number==2) return 2;
int a=1,b=2,result;
for(int i=3;i<=number;i++)
{
result=a+b;
a=b;
b=result;
}
return result;
}
};