题目描述
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
解题思路
依旧是斐波那契数列
2n的大矩形,和n个21的小矩形
其中target*2为大矩阵的大小
有以下几种情形:
- target <= 0 大矩形为<= 2*0,直接return 1;
- target = 1大矩形为2*1,只有一种摆放方法,return1;
- target = 2 大矩形为2*2,有两种摆放方法,return2;
- target = n 分为两步考虑:
代码实现
class Solution {
public:int rectCover(int number) {if(number <0 )return 0; if(number*2 == 2)return 1;if(number*2 == 4)return 2;if(number*2 > 4)return rectCover(number-1)+rectCover(number-2);}
};