您的位置:首页 > 其它

矩形覆盖

2018-02-28 00:36 218 查看

题目描述

我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?

解题思路

首先根据题意可以知道,2*1的矩形摆放方式只有两种,要么是横着放,要么是竖着放,但是如果当这块2*1的矩形横着放则肯定有一块会横着放在这块下面,所以就相当于这个矩形的长度缩小了2个单位;但如果这块2*1的矩形竖着放,无疑是将这个矩形长度缩小1个单位而已,由此可以得出结论,本题使用递归的方式来计算。

递归解法:

public class Solution {
public int RectCover(int target) {
if(target < 0){
return 0;
}else if(target == 1){
return 1;
}else if(target == 2){
return 2;
}else{
return RectCover(target-1) + RectCover(target-2);
}
}
}


非递归解法

public class Solution {
public int RectCover(int target) {
int back1 = 1;
int back2 = 1;
if(target <= 0){
return 0;
}
if(target ==1){
return 1;
}
for(int i=2;i<=target;i++){
int t = back1 + back2;
back1 = back2;
back2 = t;
}
return back2;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: