题目
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
比如n=3时,2*3的矩形块有3种覆盖方法:
递归解法和普通解法
public class test10 {
public static void main(String[] args) {
int target = 5;
RectCover(target);
RectCover1(target);
}
/**
* 普通循环解法
* @param target
* @return
*/
private static int RectCover1(int target) {
if (target <= 0) {
return 0;
}
if (target == 1 || target == 2) {
return target;
}
int[] arr = new int[target];
arr[0] = 1;
arr[1] = 2;
for (int i = 2; i < target; i++) {
arr[i] = arr[i - 1] + arr[i - 2];
}
return arr[target - 1];
}
/**
* 递归解法
*
* @param target
* @return
*/
public static int RectCover(int target) {
if (target <= 0) {
return 0;
}
if (target == 1 || target == 2) {
return target;
} else {
return RectCover(target - 1) + RectCover(target - 2);
}
}
}