您的位置:首页 > 其它

矩形覆盖

2017-01-14 11:16 162 查看


题目描述

我们可以用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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: