一、题目描述
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
二、代码
思路:归纳总结,最后发现是递归。
(1)当n=1, 2*1 ==>1种;
(2)当n=2, 2*2 ==>2种;
(3)当n=3, 2*3 ==>3种;
(4)当n=4, 2*4 ==>5种;
……
……
……
5)当n=n, 2*n ==>f(n-1)+f(n-2).
解析:2*n放入2*1矩形时,填充方式有两种,竖着放和横着放。当竖着放时,此时剩下的格子为2*(n-1),那么对应的可能性为f(n-1);当横着放时,左边的2*2确定了,此时剩下的格子数量为2*(n-2),对应的可能性为f(n-2)。所以f(n) = f(n-1)+f(n-2)

代码:
public class Solution {
int sum = 0;
public int RectCover(int target) {
if(target<0){ // 加上,否则容易越界
return 0;
} else if(target==1){
return 1;
} else if(target==2){
return 2;
} else {
sum = RectCover(target-1)+RectCover(target-2);
}
return sum;
}
}
测试程序:
class Solution {
int sum = 0;
public int RectCover(int target) {
if(target<0){
return 0;
} else if(target==1){
return 1;
} else if(target==2){
return 2;
} else {
sum = RectCover(target-1)+RectCover(target-2);
}
return sum;
}
}
public class Main {
public static void main(String[] args) {
int f;
Solution solu = new Solution();
f = solu.RectCover(3);
System.out.println(f);
}
}
三、感受
代码好写,思路不易。
本文探讨了使用2x1小矩形无重叠覆盖2xn大矩形的方法总数问题,通过归纳和递归思路,提供了Java代码实现,并详细解释了递归公式f(n)=f(n-1)+f(n-2)的逻辑。

168

被折叠的 条评论
为什么被折叠?



