题目描述
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
解题思路
假设覆盖一个2*n的矩形总共有F(n)种方法,则F(n)=F(n-1)+F(n-2). 这个表达式的含义是,可以先用1个2*1的小矩阵竖放覆盖大矩形的一列,然后再用其他的小矩形覆盖剩下的2*(n-1)的部分;或者可以先用2个小矩形覆盖横放覆盖大矩形的两列,然后再用其他的小矩形覆盖剩下的2*(n-2)的部分。
边界条件包括:F(0)=0, F(1)=1, F(2)=2.
代码
class Solution {
public:
int rectCover(int number) { //f(n)=f(n-1)+f(n-2),参考斐波那契数列
if (number == 0 || number == 1 || number == 2) //注意考虑number=0的情况,有这个测试用例
return number;
int f1 = 1, f2 = 2;
for (int i = 3; i <= number; i++)
{
f2 += f1;
f1 = f2 - f1;
}
return f2;
}
};