算法系列——矩形覆盖(剑指offer)
来源:互联网 发布:淘宝直播难申请成功 编辑:程序博客网 时间:2024/06/11 22:25
题目描述
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
解题思路
递归法
本质是一个菲波那切数列,将n个2*1的小矩形无重叠地覆盖一个2*n的大矩形的方法数记为f(n)。以n=3,为例,当竖着放的时候,右边还剩下2*2的区域,这种情况下的覆盖方法记为f(2),当横着放在左上角的时候,左下角必须横着放一个2*1的小矩形,因此右边还剩下 2*1,可以发现 f(3)=f(2)+f(1), 那么递推关系为
f(n)=f(n-1)+f(n-2)(n>2,f(0)=0,f(1)=1,f(2)=2)
动态规划法
将i个2*1的小矩形无重叠地覆盖一个2*n的大矩形的方法数记为dp[i]
状态转移方程为:
dp[i]=dp[i-1]+dp[i-2] (3<=i<=n)
程序实现
递归法
public class Solution { public int RectCover(int target) { if(target<=0) return 0; if(target==1||target==2) return target; return RectCover(target-1)+RectCover(target-2); }}
动态规划法
public class Solution { public int RectCover(int target) { if(target<=0) return 0; if(target==1||target==2) return target; //处理target>=3 int []dp=new int[target+1]; //初始化 dp[1]=1; dp[2]=2; for(int i=3;i<=target;i++) dp[i]=dp[i-1]+dp[i-2]; return dp[target]; }}
阅读全文
0 0
- 算法系列——矩形覆盖(剑指offer)
- 剑指offer—矩形覆盖
- 剑指offer—矩形覆盖
- 《剑指offer》——矩形覆盖
- 剑指offer——矩形覆盖问题
- 剑指offer——矩形覆盖
- 剑指offer——10.矩形覆盖
- 《剑指offer》—10、矩形覆盖
- 剑指offer(10)—矩形覆盖
- 剑指offer系列源码-矩形覆盖
- 剑指offer系列-T9_4矩形覆盖
- 剑指offer--矩形覆盖
- 剑指offer--矩形覆盖
- 《剑指offer》矩形覆盖
- 剑指offer 矩形覆盖
- 《剑指offer》矩形覆盖
- 剑指 offer:矩形覆盖
- 【剑指Offer】矩形覆盖
- SpringMvc+Mybatis实现一个简单人事管理系统(三)
- zoj 3556 How Many Sets I(容斥原理)
- Dijkstra算法和Floyd算法概述
- mint-ui —— cell swipe的使用
- Android开发中Handler总结
- 算法系列——矩形覆盖(剑指offer)
- esayui datagrid JQuery 一般用的方法
- 内存管理
- C#中串口接收数据触发事件
- Google的工程师每天能写多少的代码呢?
- 1445: Repeat Number
- Clion this file does not belong to any project target
- 【Tomcat】Linux下关于Tomcat部署项目的问题总结
- Unity Shader 内置函数