题目描述
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
分析:
如图,设n=3,设我们从最左边开始覆盖,一开始,我们有两种选择,竖着放或者横着放,若横着放第一块后,下一块必然要把4个格子填满。
然后图像就分为已经填好的,和还没填好的。可以看到剩下还没填好的,其实是初始问题n的一个子问题。
于是f(n) = f(n-1) + f(n-2),于是这又是一个斐波那契数列问题。
代码:
int rectCover(int number) {
if(number<=0) return 0;
int f0 = 0, f1 = 1;
int fn = f0 + f1;
for(int i=2; i<=number;i++){
f0 = f1;
f1 = fn;
fn = f0 + f1;
}
return fn;
}