我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
比如n=3时,2*3的矩形块有3种覆盖方法:
//利用斐波那契数列求解:
//当n为1时有一个2*1的小矩形,要组成2*1的矩形只有1种方法
//当n为2时有两个2*1的小矩形,要组成2*2的矩形只有2种方法
//当n为3时有三个2*1的小矩形,要组成2*3的矩形只有3种方法
//当n为4时有四个2*1的小矩形,要组成2*4的矩形只有5种方法
//由上可知满足斐波那契数列:
//f(1) = 1
//f(2) = 2
//f(n) = f(n - 1) + f(n - 2)
class Solution {
public:
int rectCover(int number) {
if(number <= 0)
{
return 0;
}
if(number == 1)
{
return 1;
}
if(number == 2)
{
return 2;
}
int first = 1;
int second = 2;
int count = 0;
for(int i = 3; i <= number; i++)
{
count = first + second;
first = second;
second = count;
}
return count;
}
};