题目描述:我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
时间限制:1秒 空间限制:32768K
思路:开始想错了,想成了排列组合问题,应该依然是斐波那契数列的递归问题。
从n=3开始,对于每一个n放法都分为两种,一种是第一块竖着放,这种放法一共有f(n-1)种,因为除去竖着放的这一列,右边n-1列的放法相当于f(n-1);第二种是第一块横着放,下一块肯定也是横着放,右边共有f(n-2)种放法,如下图所示:
代码:
class Solution {
public:
int rectCover(int number) {
if(number==0)
return 0;
if(number==1 || number==2)
return number;
return rectCover(number-1)+rectCover(number-2);
}
};