矩形覆盖
2015-12-15 11:40
309 查看
【题目描述】
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?【解题思路】
我们不妨把2*n的覆盖方法记作f(n)。假设从左向右进行覆盖。最后一次用一个1*2的小矩形去覆盖大矩形最右边时,有两种选择,竖着放或者横着放。当竖着放的时候,左边还剩下2*(n-1)的区域,这种情形下的覆盖方法记作f(n-1);接下来考虑横着放的情况。当一个1*2的小矩形去覆盖大矩形右下方的时候,其上方还需要横着放置一个1*2的小矩形,但其放置方法是固定的,只有一种方法,这时左边剩下2*(n-2)的区域需要覆盖,这种情形下的覆盖方法记作:f(n-2)。因此,我们得到递推公式:f(n)=f(n-1)+f(n-2)。仍然是我们熟悉的斐波那契数列题,代码几乎是呼之欲出了。
【代码实现】
class Solution { public: int rectCover(int number) { if(number<=1) return 1; int target=0; int first=1; int second=1; for(int i=2;i<=number;++i) { target=first+second; first=second; second=target; } return target; } };
相关文章推荐
- Kinect for Windows SDK开发学习相关资源
- python:Unable to find vcvarsall.bat错误
- javaScript prototype原型的理解
- Adapter局部刷新
- 一次服务器IO占用率高的定位分析
- Java笔记5:单例模式
- 一片不错的V4L2
- HDOJ--1011
- iOS开发 - 登陆post请求遇到的问题
- Qt layout布局
- 推荐:Tomcat与servlet区别与联系
- css reset归纳
- Ext4功能和文件系统的简单功能
- 学习与需求
- 变态跳台阶
- Kinect骨骼数据与彩色影像和深度影像的对齐
- 基于rails的schedule网站开发(12):index View页面的重构
- android contentprovider的使用(二)
- CUDA的Threading:Block和Grid设定
- static_cast,dynamic_cast,const_cast和reinterpret_cast