矩形覆盖
2017-08-28 16:11
169 查看
问:我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
链接:https://www.nowcoder.com/questionTerminal/72a5a919508a4251859fb2cfb987a0e6
来源:牛客网
(1)当 n < 1时,显然不需要用2*1块覆盖,按照题目提示应该返回 0。
(2)当 n = 1时,只存在一种情况。
(3)当 n = 2时,存在两种情况。
(4)当 n = 3时,明显感觉到如果没有章法,思维难度比之前提升挺多的。
... 尝试归纳,本质上 n 覆盖方法种类都是对 n - 1 时的扩展。
可以明确,n 时必定有 n-1时原来方式与2*1的方块结合。也就是说, f(n) = f(n-1) + ?(暂时无法判断)。
(4)如果我们现在归纳 n = 4,应该是什么形式?
4.1)保持原来n = 3时内容,并扩展一个 2*1 方块,形式分别为 “| | | |”、“= | |”、“| = |”
4.2)新增加的2*1 方块与临近的2*1方块组成 2*2结构,然后可以变形成 “=”。于是 n = 4在原来n = 3基础上增加了"| | ="、“= =”。
再自己看看这多出来的两种形式,是不是只比n = 2多了“=”。其实这就是关键点所在...因为,只要2*1或1*2有相同的两个时,就会组成2*2形式,于是就又可以变形了。
所以,自然而然可以得出规律: f(n) = f(n-1) + f(n-2), (n > 2)。
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);
}
}
}
链接:https://www.nowcoder.com/questionTerminal/72a5a919508a4251859fb2cfb987a0e6
来源:牛客网
(1)当 n < 1时,显然不需要用2*1块覆盖,按照题目提示应该返回 0。
(2)当 n = 1时,只存在一种情况。
(3)当 n = 2时,存在两种情况。
(4)当 n = 3时,明显感觉到如果没有章法,思维难度比之前提升挺多的。
... 尝试归纳,本质上 n 覆盖方法种类都是对 n - 1 时的扩展。
可以明确,n 时必定有 n-1时原来方式与2*1的方块结合。也就是说, f(n) = f(n-1) + ?(暂时无法判断)。
(4)如果我们现在归纳 n = 4,应该是什么形式?
4.1)保持原来n = 3时内容,并扩展一个 2*1 方块,形式分别为 “| | | |”、“= | |”、“| = |”
4.2)新增加的2*1 方块与临近的2*1方块组成 2*2结构,然后可以变形成 “=”。于是 n = 4在原来n = 3基础上增加了"| | ="、“= =”。
再自己看看这多出来的两种形式,是不是只比n = 2多了“=”。其实这就是关键点所在...因为,只要2*1或1*2有相同的两个时,就会组成2*2形式,于是就又可以变形了。
所以,自然而然可以得出规律: f(n) = f(n-1) + f(n-2), (n > 2)。
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);
}
}
}
相关文章推荐
- ZOJ 2747 Paint the Wall(多矩形面积覆盖)
- 【矩形覆盖问题分析】 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
- 【剑指Offer面试题】 九度OJ1390:矩形覆盖
- hdu 5091 给定矩形覆盖尽量多点 扫描线+线段树
- UVA 10173 最小矩形覆盖(凸包+旋转卡壳)
- [BZOJ1185][HNOI2007]最小矩形覆盖(凸包+旋转卡壳)
- 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠2*n的大矩形,总共有多少种方法?
- 矩形覆盖
- POJ 1177 Picture(扫描线 + 线段树 矩形覆盖区域周长的并)
- BZOJ1185 [HNOI2007]最小矩形覆盖
- [SDOI2008] 立方体覆盖 - 矩形切割(立方体切割)
- 《剑指offer》矩形覆盖
- 矩形覆盖
- 剑指offer第十题【矩形覆盖】c++实现
- 矩形覆盖
- 剑指offer10 矩形覆盖
- 矩形覆盖
- 剑指Offer——(10)矩形覆盖
- java实现我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
- [Luogu P3187] [HNOI2007]最小矩形覆盖