题目
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2n的大矩形,总共有多少种方法?
比如n=3时,23的矩形块有3种覆盖方法:
思路
- 对于一个长方体,只有两种放法:
- 竖着放
- 横着放
- 所组成的大长方体宽度是一定的
- 故,从左边开始放的话,有两种情况:
- 竖着放一个
- 横着放两个
- 结论:
fn = f(n-1) + f(n-2)
代码
java
//递归
public int RectCover(int target) {
if (target < 3) return target;
return RectCover(target - 1) + RectCover(target - 2);
}
//非递归
public int RectCover(int target) {
if (target < 3) return target;
int res = 0;
int fm = 1;
int fn = 2;
for (int i = 3; i <= target; i++) {
res = fm + fn;
fm = fn;
fn = res;
}
return res;
}
来源:CSDN
作者:Ale_li
链接:https://blog.csdn.net/qq_43186092/article/details/104779034