Java实现矩形覆盖
来源:互联网 发布:淘宝9.9元特价专区在哪 编辑:程序博客网 时间:2024/06/08 11:41
题目描述
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
不知道为什么,拿到这个题,我觉得好像似曾相识....
难道不是青蛙跳台阶的另一种说法?
分析题目:
首先,2*1或者是2*n,长为2是确定的。
如果横着放,那么长度2被覆盖了,宽度n-1
如果竖着放,长度2只被覆盖了一半,宽度n-2,所以只要是竖着放,必须是两个一起竖着放。
从覆盖的角度,也就是n逐渐减少的过程来看,这里的递推公式应该是:
f(n)=f(n-1)+f(n-2)
所以第一版我用的是递归,AC了。但是时间复杂度和空间复杂度都比较高。
换一个思路,把题目想象成,用小矩形拼凑出大矩形,就是n++的思路,
那么,
f(1)=1
f(2)=2
f(3)=f(2)+f(1)
f(4)=f(3)+f(2)
.....
f(n)=f(n-1)+f(n-2)
这样就可以用for循环来做了。
AC代码如下,23ms:
public class Solution { public int RectCover(int target) { if (target <= 0) { return 0; } if (target == 1) { return 1; } if (target == 2) { return 2; } // int sum=RectCover(target-1)+RectCover(target-2); // return sum; int first = 1; int second = 2; int third = 0; for(int i = 3; i <= target; i++) { third = first + second; first = second; second = third; } return third; }}
阅读全文
0 0
- Java实现矩形覆盖
- 矩形覆盖java实现
- 矩形覆盖--递归实现
- 矩形覆盖(java)
- JAVA实现矩形覆盖问题(《剑指offer》)
- JAVA实现矩形覆盖问题(《剑指offer》)
- 矩形覆盖(java版本)
- 矩形覆盖[剑指offer]之python实现
- 矩形覆盖
- 矩形覆盖
- 矩形覆盖
- 矩形覆盖
- 矩形覆盖
- 矩形覆盖
- 矩形覆盖
- 矩形覆盖
- 矩形覆盖
- 矩形覆盖
- 工程中编写自己的Makefile---1 一些基本概念
- 分布式相关文章收集(转)
- Java EE之Servlet、JSP学习
- css3提示文字弹窗代码
- 安装VirtualBox的时候遇到的问题
- Java实现矩形覆盖
- 虚析构函数
- SQLServer中char、varchar、nchar、nvarchar的区别:
- 事务提交大量sql与合并提交大量sql效率对比
- 液压油缸修复时对液压油选择的要求
- 随机抽奖
- SpringMVC自学系列(1)——入门了解
- 设计模式之模板方法模式
- SDE For PostgreSQL数据库改名方法