矩形覆盖--递归实现
来源:互联网 发布:通达信软件的使用方法 编辑:程序博客网 时间:2024/06/08 00:28
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
这个题的比较难以下手,首先找一下规律,n=1,只有一种,n=2,是一个正方形,可以讲小矩形横着放或者竖着放:
当n=3,假如第三个小矩形恰好能够竖直放下,这个时候,就相当于只考虑第一个和第二个小矩形怎么放,也就是怎么用小矩形去填充一个正方形,就回到了上一步,n=2时的方法,这个时候的方法数恰好就应该为f(2).
假如第三个小矩形恰好能够横着放下,这个时候第二个矩形也必定是横着放的,那么第二和第三个小矩形就确定了,只需要考虑第一个小矩形的摆放方法,也就是f(1).
那么f(3)=f(2)+f(1)。这个时候我们还不能完全看出规律。假如n很大的时候,我们只考虑n,n-1,n-2,这三个小矩形的摆放方式。如下图所示:
按照n=3 时候的思考,假如摆放第n个小矩形只能竖直摆放,那么恰好是下图这种情况:
这时,最后一个小矩形是固定的,只要考虑前面n-1个小矩形的摆放方法,就是f(n)。
接着,假如最后一个小矩形只能横着摆放,也就是下图所示:
这个时候,最后两个小矩形的位置固定的,就只需要考虑前n-2个小矩形的摆放方式,也就是f(2).
综上分析:
f(n) = f(n-1) + f(n-2). (n >= 3)
f(2) = 2;
f(1) = 1
f(0) = 0;
代码如下:
public class Solution { public int RectCover(int target) { if(target <= 0){ return 0; } if(target == 1){ return 1; } if(target == 2){ return 2; } return RectCover(target - 1) + RectCover(target -2 ); }}
0 0
- 矩形覆盖--递归实现
- 矩形覆盖-避免递归
- 矩形覆盖——递归
- 矩形覆盖(递归 循环)
- Java实现矩形覆盖
- 矩形覆盖java实现
- 剑指offer: 矩形覆盖(循环与递归)
- 剑指offer_递归与循环---矩形覆盖
- n个2*1小矩形无重叠覆盖2*n大矩形(递归,思路分析及代码实现,斐波那契数列衍生)
- 矩形覆盖[剑指offer]之python实现
- usaco window arear(递归求矩形覆盖面积)
- 《剑指Offer》递归和循环——矩形覆盖
- 矩形覆盖
- 矩形覆盖
- 矩形覆盖
- 矩形覆盖
- 矩形覆盖
- 矩形覆盖
- CSS font-family 各名称一览表
- 你应该知道的那些超时设置或默认参数
- VS2010 安装boost库
- SIFT算法详解
- mysql 按照年龄段分组查询
- 矩形覆盖--递归实现
- Nuttx的介绍
- 【LeetCode7】【Reverse Integer】java中整形正负表示的一些思考
- Android NDK开发之从环境搭建到Demo级十步流
- 整型提升(integer promotion)
- 磁盘:最容易被忽略的性能洼地
- 解决ScrollView嵌套ListView后,进入页面不从顶部开始
- 红宝书 第15章整理——canvas
- git常用命令整理