剑指offer----矩形覆盖问题的解析与实现
来源:互联网 发布:上海财经大学知乎 编辑:程序博客网 时间:2024/05/01 21:39
问题:
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
解析:
此类问题和青蛙跳台阶n个 每次可以跳一个台阶或者两个台阶 一共有多少次跳法 本质是一样的
当n=1,矩阵为2*1,只有横着覆盖1种方法
当n=2,矩阵为2*2,有横着覆盖和竖着覆盖2种方法
当n>=2时,设有F(n)种覆盖方法
(1)若第一次选择横着覆盖,那么剩下的2*(n-1)个矩形有F(n-1)种覆盖方法
(2)若第一次选择竖着覆盖,那么剩下的2*(n-2)个矩形有F(n-2)种覆盖方法
所以当有2*n个矩形时 F(n) = F(n-1)+F(n-2)种覆盖方法
实现:迭代法
public int RectCover(int target) { if(target <= 0) //之前跳台阶的问题没有考虑小于等于零的情况 后来考虑了一下,既然变量是int型的,还是把小于等于零的情况考虑进去比较好 return 0;else if(target == 1 || target == 2) { return target; } else { int result = 0; int first = 1; int second= 2; for (int i = 3; i <= target; i++) { result = first + second; first = second; second = result; } return result; } }
递归:这类问题还是用迭代实现比较好
public int RectCover(int target) { if(target <= 0) return 0; else if(target == 1 || target == 2) { return target; } else { return RectCover(target-1) + RectCover(target-2); } }
0 0
- 剑指offer----矩形覆盖问题的解析与实现
- 剑指offer矩形覆盖问题
- 【剑指offer】矩形覆盖问题
- JAVA实现矩形覆盖问题(《剑指offer》)
- JAVA实现矩形覆盖问题(《剑指offer》)
- 剑指offer(10):矩形覆盖问题
- 剑指offer——矩形覆盖问题
- 矩形覆盖[剑指offer]之python实现
- 剑指offer: 矩形覆盖(循环与递归)
- 剑指offer--矩形覆盖
- 剑指offer--矩形覆盖
- 《剑指offer》矩形覆盖
- 剑指offer 矩形覆盖
- 《剑指offer》矩形覆盖
- 剑指 offer:矩形覆盖
- 【剑指Offer】矩形覆盖
- 剑指offer 矩形覆盖
- 剑指offer-矩形覆盖
- UITableView学习笔记
- 第二天 关于XML语言
- 剑指offer-面试题12:打印1到最大的n位数
- Install SharePoint2016 RTM - Hardware and Software Requirements
- Go语言概览——《Java程序员学习Go》之一
- 剑指offer----矩形覆盖问题的解析与实现
- DDD架构图
- android studio 插件
- 第16周阅读程序(3)
- 第15周 阅读程序 (1)
- 存储过程
- UILabel的自适应高度
- Ubuntu环境安装汇总
- keytool 错误: java.lang.Exception: 所输入的不是 X.509 证书