剑指offer之矩形覆盖问题
问题描述
我们可以用2×12\times 12×1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2×12\times 12×1的小矩形无重叠地覆盖一个2×n2\times n2×n的大矩形,总共有多少种方法?
求解思路
同样是斐波那契的数列的思路,本质上是动态规划。
- n<=0时,结果为零,这是下界条件。
- n==1时,只有竖着一种覆盖方式。
- n==2时,有并排横着和并排竖着两种方式。
- 假设n步的情况下有f(n)f(n)f(n)种方式,那么如果前一个状态是只差了一个竖着的2*1矩形,那么为f(n−1)f(n-1)f(n−1);如果是差了两个矩形的空间,那么是f(n−2)f(n-2)f(n−2);综上可知:f(n)=f(n−1)+f(n−2)f(n)=f(n-1)+f(n-2)f(n)=f(n−1)+f(n−2)
之后就是利用递推求解了。。。。
AC代码
class Solution {public:int rectCover(int number) {if(number <= 0) {return 0;}if(number == 1) {return 1;}if(number == 2) {return 2;}int a = 1, b = 2;for(int i = 3; i <= number; ++i) {int t = a;a = b;b = t + a;}return b;}
};
斐波那契数列递推思想总结
本质上,斐波那契递推思想就是一个动态规划。利用前面的计算结果,递推地计算后边的,可以有效的防止重复的运算。一般这种问题的解决步骤如下:
- 先找出几个容易计算的初始条件
- 寻找最少的初始条件的组合方式,使之可以递推出后面的结果
- 寻找一般的递推公式
可能寻找公式的时候,需要自己进行简化,比如前面的变态跳台阶问题。但是,核心的步骤还是找公式!!!
剑指offer之矩形覆盖问题相关推荐
- 剑指Offer #10 矩形覆盖(问题分析)
题目来源:牛客网-剑指Offer专题 题目地址:矩形覆盖 题目描述 我们可以用2∗12*12∗1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2∗12*12∗1的小矩形无重叠地覆盖一个2∗n2*n2 ...
- 剑指offer:矩形覆盖 python 实现
题目 题目描述 我们可以用21的小矩形横着或者竖着去覆盖更大的矩形.请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 解题思路 简单的推一下,又是斐波那契数列 # -*- co ...
- 剑指offer:矩形覆盖
题目描述: 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 解题思路: 和跳台阶那道题差不多.分别以矩形的两条边长做拓 ...
- 剑指offer十:矩形覆盖
题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 思路如下: 当第一次横着覆盖时,覆盖方法为f(n-2); 当 ...
- Python剑指offer:矩形覆盖问题
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用8个21的小矩形 无重叠的覆盖一个28的大矩形,共有多少种方法? * * * * * * * * * * * * * * * * * * 这 ...
- 【剑指offer】矩形覆盖
一.题目: 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 二.思路: 斐波那契数列 三.代码: 转载于:h ...
- 《剑指Offer》 矩形覆盖
题目描述: 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 思路: 这题和前面的那道跳台阶是一模一样的题,也是动态规划 ...
- 剑指offer Q10 矩形覆盖
题目描述 我们可以用21的小矩形横着或者竖着去覆盖更大的矩形.请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 这不还是斐波那契数列!怎么回事 直接上代码 class Solu ...
- 7、斐波那契数列、跳台阶、变态跳台阶、矩形覆盖------------剑指offer系列
题目:斐波那契数列 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). f(n) = f(n-1) + f(n-2) 基本思路 这道题在剑指offe ...
最新文章
- Top 命令 如何查看linux系统中空闲内存/物理内存使用/剩余内存
- 清华医工结合项目及三创项目与天津市27家重点医院对接
- 真正决定分辨准确率的是图片重叠的区域
- 【Android游戏开发之五】游戏注册界面Demo-实现两个Activity之间的切换与数据交互!...
- 一网打尽2013最常用的NoSQL数据库
- ini_set(display_errors,On);和error_reporting(E_ALL);
- linux oracle手动启动两个实例
- Android开发人员应该知道的一些技术
- 语言做一个自动售货机软件_软件开发手机app系统软件高端定制做一个app软件要多少钱...
- 我的docker随笔33:在容器中连接oracle数据库
- mysql在学号列创建主码约束_MySQL 数据完整性
- dotproject问题。
- 员工新参(北京)社保所需材料
- PLC同时连接多个触摸屏和电视机显示器解决方案
- 随想002:设计规范
- 复制url直接能跳过验证_爬虫黑科技-绕开百度人机验证
- indesign中怎么在冒号后面ctrl_InDesign不完全使用指南
- 机器学习及SparkMLlib简介
- ibm ilog mysql_IBM ILOG CPLEX Optimization Studio: 一个整数规划的案例
- 如何看待 Google 最新的系统 Fuchsia?