题目描述
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
public class Solution {
public int RectCover(int target) {
if (target <= 0) {
return 0;
}
if (target <= 2) {
return target;
} else {
return RectCover(target - 1) + RectCover(target - 2);
}
}
}
分析:程序中的target相当与题目中的n。
当n=0时,是不需要覆盖的,返回值为 0;
当n=1时,即是用1个2*1的小矩形覆盖一个2*1的大矩形,只有1种方法,返回n的值也即是返回1;
当n=2时,即是用2个2*1的小矩形覆盖一个2*2的大矩形,可以横着覆盖,也可以竖着覆盖,有2中方法,返回n的值也即是返回2 ;
当n>=3时,覆盖的时候可以横着也可以竖着,当第一次是竖着覆盖,则覆盖的方法为RectCover(n-1)种,当第一次是横着覆盖,则覆盖的方法为RectCover(n-2)。因此,当n>=3时,覆盖方法共有RectCover(n-1)+RectCover(n-2)种。