题目描述
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
比如n=3时,2*3的矩形块有3种覆盖方法:
示例1
- 输入
4
- 返回值
5
解题思路
这个题目与跳台阶那个题目类似。
当然也可以使用递推方法,推出规律:
n=1:1种
n=2:2种
n=3:3种
n=4:5种
……
F(n)=F(n-1)+F(n-2)
- 递归
public class Solution {
public int RectCover(int target) {
if(target <= 2)
return target;
return RectCover(target-1)+RectCover(target-2);
}
}
- 线性规划
public class Solution {
public int RectCover(int target) {
if (target <= 2) return target;
int a = 1, b = 2, c = 0;
for (int i=3; i<= target; ++i) {
c = a + b;
a = b;
b = c;
}
return c;
}
}
代码
public class Solution {
public int RectCover(int target) {
if (target <= 2) return target;
int a = 1, b = 2, c = 0;
for (int i=3; i<= target; ++i) {
c = a + b;
a = b;
b = c;
}
return c;
}
}