1.题目
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?比如n=3时,2*3的矩形块有3种覆盖方法
2.思路
递归。矩形的最右边,可以有2种方式:(1)一个竖着的2*1矩形,(2)2个横着的2*1矩形。如果是竖着的则方法数为f(n-1),如果是横着的则方法数为f(n-2), f(0)=0,f(1)=1,f(2)=2,f(n)=f(n-1)+f(n-2)。
循环。利用循环实现递归f(n)=f(n-1)+f(n-2)。
3.代码
递归
public class Solution {
public int RectCover(int target) {
if(target==0||target==1||target==2)
{
return target;
}
else
{
return RectCover(target-1)+RectCover(target-2);
}
}
}
循环
public class Solution {
public int RectCover(int target) {
if(target==0||target==1||target==2)
{
return target;
}
else
{ int fir=1;
int sec=2;
int thr=0;
for(int i=3;i<=target;i++){
thr=fir+sec;
fir=sec;
sec=thr;
}
return thr;
}
}
}