题目
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
比如n=3时,2*3的矩形块有3种覆盖方法:
解
我们绘制出n为1~5的所有可能的图案:
通过查找规律,在求结过程中number图案个数过程中:
- 当第一个方块为类型为竖直的,获取number-1的可能图案数即可
- 当前两个方块为水平,获取number-2的可能图案数即可
因此初始值:
number = 0 :0
number = 1 :1
number = 2 :2
number>2:number(n-1)+number(n-2)
可以发现,该题同斐波那契数列相似,求累加和即可
递归方法
class Solution {
public:
int rectCover(int number) {
if(number < 3) return number;
return rectCover(number-1) + rectCover(number-2);
}
};