题目描述
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
思路
这还是斐波那契数列的变形,通过分析我们可以知道F(n) = F(n-1) + F(n-2)。覆盖方法分为两种,取决于第一步怎么放:如果第一步沿着左边竖着放转,有F(n-1)种方法,如果第一步沿着左边横着放,则第二步必须将剩下的矩形填满,该种情况下有F(n-2)种方法。
#代码
class Solution {
public:
int rectCover(int number) {
int C_1 = 1;
int C_2 = 2;
int count_nb ;
if (number == 0)
return 0;
if (number == 1)
return C_1;
if (number == 2)
return C_2;
while (number >2)
{
count_nb = C_1 + C_2;
C_1 = C_2;
C_2 = count_nb;
number --;
}
return count_nb;
}
};
其实递归也可以,但是斐波那契递归耗时600ms,循环仅需3ms,何必呢