题目描述
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
思路:逆向分析,应为可以横着放或竖着放,多以f(n)可以是2*(n-1)的矩形加一个竖着放的2*1的矩形或2*(n-2)的矩形加2横着放的,即f(n)=f(n-1)+f(n-2),当到了最后,f(1)=1,f(2)=2。
C/C++代码:
class Solution
{
public:
int rectCover(int number)
{
if(number == 1)
{
return 1;
}
else if(number == 2)
{
return 2;
}
else
{
int *record = new int[number + 1];
record[0] = 1;
record[1] = 1;
record[2] = 2;
for(int i = 3; i <= number; i++)
{
record[i] = record[i - 1] + record[i - 2];
}
return record[number];
}
}
};