您的位置:首页 > Web前端

剑指offer——第10题——覆盖矩形

2019-05-10 09:40 99 查看

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

既然是长条形的,那么从后向前,最后一个矩形2*2的,只有两种情况:

第一种是最后是由一个2*(n-1)的矩形加上一个竖着的2*1的矩形

另一种是由一个2*(n-2)的矩形,加上两个横着的21的矩形
  因此我们可以得出,
  第2n个矩形的覆盖方法等于第2*(n-1)加上第2*(n-2)的方法。
1、递归
2、迭代

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