问题:我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形,请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
思路:首先理解清楚,是去覆盖,不是让你随便摆,也就是说去覆盖2*n的矩形,也就是说矩形的一边始终保持为2;
故而,n=1时,就方法数m =1;(就一种方法)
n=2时,m=2;(两块都横着放,或者两块都竖着放)
n>=3时,方法m=f(n) = f(n-1) + f(n-2); 取决于它前两块的放法之和。
具体代码:(C++)
class Solution
{
public:
int rectCover(int num)
{
if(num <=2)
return num;
int pre1 = 2, pre2 = 1;
int cur;
for(int i=2;i<num;i++)
{
cur = pre1 + pre2;
pre2 = pre1;
pre1 = cur;
}
return cur;
}
};