题目描述
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
思路
若一共有方法为f(n),主要分为两种情况
1.若最后一块是竖着摆放
则前面n-1个2*1的小矩形摆放在前面2*(n-1)的大矩形里一共有f(n-1)种方法
2.若最后一块横着摆放
则最右边需要两块,故左边为前面n-2个2*1的小矩形摆放在前面2*(n-2)的大矩形里一共有f(n-2)种方法
故f(n)=f(n-1)+f(n-2)为斐波那契额数列
有f(1)=1,f(2)=2
代码为
public class Solution {
public int RectCover(int target) {
if(target<=0) return 0;
if(target==1) return 1;
if(target==2) return 2;
int a=1,b=2,c=0;
for(int i=3;i<=target;i++){
c=a+b;
a=b;
b=c;
}
return c;
}
}
可以参考之前的博客https://blog.csdn.net/ChaunceyChen/article/details/87899953