您的位置:首页 > Web前端

剑指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)放置的方法。

注:此题也属于动态规划的范畴,比之前的跳台阶相对难理解些。

代码贴上:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: