题目描述
我们可以用2*1
的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1
的小矩形无重叠地覆盖一个2*n
的大矩形,总共有多少种方法?
比如n=3时,2*3
的矩形块有3种覆盖方法:
解决方法
刚看到题就懵了!一个个画出来,找规律
找规律题,用到递归、循环
被覆盖的目标矩形的形状: 2*n
每次新增加的:
(1)如果竖着放对应的情况与 target为 n-1 时相同;
(2)如果横着放,对应的情况与 target 为 n-2 时相同。
递归
public class Solution {
public int RectCover(int target) {
if(target<=2){
return target;
}
return RectCover(target-1)+RectCover(target-2);
}
}
递推
需要注意target=0
的情况,和跳台阶
要区分开
public class Solution {
public int RectCover(int target) {
if(target<=2)
return target;
int a=1,b=2;
for(int i=3;i<=target;i++){
b=a+b;
a=b-a;
}
return b;
}
}