剑指offer(十)之矩形覆盖
2016-04-17 18:43
423 查看
题目描述
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
思路分析:
依旧是斐波那契数列
2*n的大矩形,和n个2*1的小矩形
其中target*2为大矩阵的大小
有以下几种情形:
1⃣️target <= 0 大矩形为<= 2*0,直接return 1;
2⃣️target = 1大矩形为2*1,只有一种摆放方法,return1;
3⃣️target = 2 大矩形为2*2,有两种摆放方法,return2;
4⃣️target = n 分为两步考虑:
第一次摆放一块 2*1 的小矩阵,则摆放方法总共为f(target - 1)
第一次摆放一块1*2的小矩阵,则摆放方法总共为f(target-2)
因为,摆放了一块1*2的小矩阵(用√√表示),对应下方的1*2(用××表示)摆放方法就确定了,所以为f(targte-2)
代码如下:
public class Solution {
public int RectCover(int target) {
if(target<=0){
return 1;
}else if(target==1){
return 1;
}else if(target==2){
return 2;
}else{
return RectCover(target-1)+RectCover(target-2);
}
}
}
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
思路分析:
依旧是斐波那契数列
2*n的大矩形,和n个2*1的小矩形
其中target*2为大矩阵的大小
有以下几种情形:
1⃣️target <= 0 大矩形为<= 2*0,直接return 1;
2⃣️target = 1大矩形为2*1,只有一种摆放方法,return1;
3⃣️target = 2 大矩形为2*2,有两种摆放方法,return2;
4⃣️target = n 分为两步考虑:
第一次摆放一块 2*1 的小矩阵,则摆放方法总共为f(target - 1)
√ | |||||||
√ |
因为,摆放了一块1*2的小矩阵(用√√表示),对应下方的1*2(用××表示)摆放方法就确定了,所以为f(targte-2)
√ | √ | ||||||
× | × |
public class Solution {
public int RectCover(int target) {
if(target<=0){
return 1;
}else if(target==1){
return 1;
}else if(target==2){
return 2;
}else{
return RectCover(target-1)+RectCover(target-2);
}
}
}
相关文章推荐
- javascript 前端学习经验总结
- xml与json的对比
- jQuery选择器探究:正则表达式分析
- Jsp的四大域对象
- js---匿名函数和闭包
- angularjs结合localstorage完成一个简单的备忘录
- PhantomJS
- jQuery UI dialog
- 《Javascript秘密花园》学习笔记(中)
- [后端人员耍前端系列]KnockoutJs篇:快速掌握KnockoutJs
- Caffe实战系列:如何将CRFAsRNN移植到caffe-windows上去
- jQuery选择器探究:语法汇总
- html(单纯html标签)
- css box-sizing以及calc()
- HTML&CSS—— javascript (function(){})()闭包
- 半卷湘帘半掩门,碾冰为土玉为盆——客户端检测
- Slick 图片左右滑动幻灯片效果
- JSON
- node模块的分类
- Json实际项目中应用