1、题目描述
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
2、思路(递归调用)
若不存在小矩形,则返回0;
若只存在一个小矩形,则只有一种方法,返回1;
若存在两个小矩形,则存在两种方法,返回2;
若小矩形的数量大于2,则若一个小矩形横着放,则这个小矩形下面的小矩形也必须横着放,没有其他的选择,所以只需计算其他n-2块矩形的放法就行。若一个小矩形竖着放,则需要计算其他n-1块小矩形的放法。
3、代码实现
public class Solution {
public int RectCover(int target) {
//如果小矩形不存在
if(target <= 0){
return 0;
}
//如果只存在一个小矩形,则只有一种放法
if(target == 1){
return 1;
}
//如果只存在两个小矩形,则有两种放法
if(target == 2){
return 2;
}
//否则是剩余target-1块(小矩形竖着放)的放法和剩余target-2块(小矩形横着放)放法的和
return RectCover(target-1)+RectCover(target-2);
}
}