题目描述
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
题目解析:
对于n个矩形,如果我们选择第一个矩形选择竖着覆盖,则剩下一个2*(n - 1)的区域需要n-1个2*1的矩形来覆盖,如果第一个矩形横着覆盖,第二个矩形必然需要横着覆盖,所以剩下2*(n-2)的区域需要n-2个2*1的矩形覆盖的方法。所以这也是一个斐波那契数列式的问题。
代码如下:
public int RectCover(int target) {
int n = 3;
int n_1 = 3;
int n_2 = 2;
if (target <= 0){
return 0;
}else if (target <= 3){
return target;
}else {
for (int i = 4; i <= target; i++) {
n = n_1 + n_2;
n_2 = n_1;
n_1 = n;
}
return n;
}
}