剑指Offer之矩形覆盖
2018-03-09 10:11
281 查看
题目描述
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
思路:
我刚做此题的时候比较难理解,后来自己看了解析以后,自己在想想就想通了,我就说说我自己的理解。先附上一张图:
图中每一个格子代表单元格
第一部分:
在2 * target的矩形中,当2 * 1的矩形(以下称为小矩形)竖着放时,剩下未放的小矩形的组成的大矩形面积等于2 * (target - 1),也就是当竖着放小矩形时,放置的方法
f(target) = f(target - 1);
第二部分:
当小矩形横着放时,√所表示的矩形位置已经确定,剩下未放置的小矩形组成的大矩形面积等于2 * target - 2,也就是当横着放置小矩形时,放置的方法f(target) = f(target - 2);
第三部门:
第一部分和第二部分结合就为f(target)放置的方法。
注:此题也属于动态规划的范畴,比之前的跳台阶相对难理解些。
代码贴上:
4000
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
思路:
我刚做此题的时候比较难理解,后来自己看了解析以后,自己在想想就想通了,我就说说我自己的理解。先附上一张图:
图中每一个格子代表单元格
第一部分:
在2 * target的矩形中,当2 * 1的矩形(以下称为小矩形)竖着放时,剩下未放的小矩形的组成的大矩形面积等于2 * (target - 1),也就是当竖着放小矩形时,放置的方法
f(target) = f(target - 1);
第二部分:
当小矩形横着放时,√所表示的矩形位置已经确定,剩下未放置的小矩形组成的大矩形面积等于2 * target - 2,也就是当横着放置小矩形时,放置的方法f(target) = f(target - 2);
第三部门:
第一部分和第二部分结合就为f(target)放置的方法。
注:此题也属于动态规划的范畴,比之前的跳台阶相对难理解些。
代码贴上:
public class Solution { public int RectCover(int target) { //2 * target的特殊情况 if(target == 0 || target == 1 || target == 2){ return target; } int[] f = new int[target]; f[0] = 1; f[1] = 2; int i = 2; while(i < target){ f[i] = f[i - 1] + f[i - 2]; ++i; } return f[target - 1]; } }
4000
相关文章推荐
- 牛客网-剑指offer-10-矩形覆盖
- 剑指offer—矩形覆盖
- 【剑指Offer面试编程题】题目1390:矩形覆盖--九度OJ
- 剑指offer: 矩形覆盖
- 【剑指offer】10矩形覆盖
- 剑指offer--(12) 矩形覆盖
- 剑指Offer(10)______矩形覆盖
- 【剑指Offer面试编程题】题目1390:矩形覆盖--九度OJ
- 剑指offer 矩形覆盖
- 剑指offer面试题[9-3]-矩形覆盖
- 剑指offer之矩形覆盖
- 剑指offer--矩形覆盖
- 剑指offer: 矩形覆盖(循环与递归)
- 剑指Offer--10.矩形覆盖
- 剑指offer 编程题(9):矩形覆盖
- 剑指offer之面试题9-4:矩形覆盖
- 剑指OFFER----10、矩形覆盖
- 【剑指Offer面试题】 九度OJ1390:矩形覆盖
- 剑指offer 9.7 矩形覆盖
- 剑指offer_矩形覆盖