首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >面试算法-矩形覆盖

面试算法-矩形覆盖

作者头像
圆号本昊
发布2021-09-24 11:24:21
发布2021-09-24 11:24:21
4770
举报
文章被收录于专栏:github@hornhuanggithub@hornhuang

题目描述:

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


分析:

斐波那契数列

(1)当 n < 1时,显然不需要用2*1块覆盖,按照题目提示应该返回 0。 (2)当 n = 1时,只存在一种情况。 (3)当 n = 2时,存在两种情况。 (4)当 n = 3时,明显感觉到如果没有章法,思维难度比之前提升挺多的。

划重点:

(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)。


代码:

代码语言:javascript
复制
public class Solution {
    public int RectCover(int target) {
    	if (target == 0) {
			return 0;
		}else if (target == 1 || target == 2) {
			return target;
		}
    	return RectCover(target - 1) + RectCover(target - 2);
    }
}

参考:

参考思路


如果该思路对您有帮助,欢迎关注我获得跟多资讯~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/05/27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述:
  • 分析:
  • 划重点:
  • 代码:
  • 参考:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档