Leetcode 391. Perfect Rectangle 完美矩形 解题报告

原创 2016年08月29日 16:04:45

1 解题思想

这道题是说给了一堆小矩形的坐标(左下角和右上角围成的),问其能否组合成一个完美的矩形(刚刚好,不多,不少,不交叉重复)。

这题肯定不能暴力开辟一个数组去做,或者其他类似思想。。

看了下Leetcode的讨论,最终总结出如下的做法:

 核心思想就是:能够正好围成一个矩形的情况就是:
有且只有:
- 最左下 最左上 最右下 最右上 的四个点只出现过一次,其他肯定是成对出现的(保证完全覆盖)
- 上面四个点围成的面积,正好等于所有子矩形的面积之和(保证不重复)

2 原题

Given N axis-aligned rectangles where N > 0, determine if they all together form an exact cover of a rectangular region.

Each rectangle is represented as a bottom-left point and a top-right point. For example, a unit square is represented as [1,1,2,2]. (coordinate of bottom-left point is (1, 1) and top-right point is (2, 2)).


Example 1:

rectangles = [
  [1,1,3,3],
  [3,1,4,2],
  [3,2,4,4],
  [1,3,2,4],
  [2,3,3,4]
]

这里写图片描述

Return true. All 5 rectangles together form an exact cover of a rectangular region.

Example 2:

rectangles = [
  [1,1,2,3],
  [1,3,2,4],
  [3,1,4,2],
  [3,2,4,4]
]

Return false. Because there is a gap between the two rectangular regions.

这里写图片描述

Example 3:

rectangles = [
  [1,1,3,3],
  [3,1,4,2],
  [1,3,2,4],
  [3,2,4,4]
]

Return false. Because there is a gap in the top center.

这里写图片描述

Example 4:

rectangles = [
  [1,1,3,3],
  [3,1,4,2],
  [1,3,2,4],
  [2,2,4,4]
]

Return false. Because two of the rectangles overlap with each other.

这里写图片描述

3 AC解

/**
 * 核心思想就是:能够正好围成一个矩形的情况就是:
 * 有且只有:
 *   - 最左下 最左上 最右下 最右上 的四个点只出现过一次,其他肯定是成对出现的(保证完全覆盖)
 *   - 上面四个点围成的面积,正好等于所有子矩形的面积之和(保证不重复)
 * Created by MebiuW on 16/8/29.
 */
public class Solution {
    public boolean isRectangleCover(int[][] rectangles) {
        int left = Integer.MAX_VALUE;
        int right = Integer.MIN_VALUE;
        int top = Integer.MIN_VALUE;
        int bottom = Integer.MAX_VALUE;
        int n = rectangles.length;
        HashSet<String> flags = new HashSet<String>();
        int totalArea = 0;
        for(int i=0;i<n;i++){
            left = Math.min(left,rectangles[i][0]);
            bottom = Math.min(bottom,rectangles[i][1]);
            right = Math.max(right,rectangles[i][2]);
            top = Math.max(top,rectangles[i][3]);
            totalArea += (rectangles[i][3]-rectangles[i][1])*(rectangles[i][2]-rectangles[i][0]);
            String pointLT = rectangles[i][0] + " "+ rectangles[i][3];
            String pointLB = rectangles[i][0] + " "+ rectangles[i][1];
            String pointRT = rectangles[i][2] + " "+ rectangles[i][3];
            String pointRB = rectangles[i][2] + " "+ rectangles[i][1];
            if (!flags.contains(pointLT)) flags.add(pointLT); else flags.remove(pointLT);
            if (!flags.contains(pointLB)) flags.add(pointLB); else flags.remove(pointLB);
            if (!flags.contains(pointRT)) flags.add(pointRT); else flags.remove(pointRT);
            if (!flags.contains(pointRB)) flags.add(pointRB); else flags.remove(pointRB);
        }
        if(flags.size()==4 && flags.contains(left+" "+top) && flags.contains(left+" "+bottom) && flags.contains(right+" "+bottom) && flags.contains(right+" "+top)){
            return totalArea == (right - left) * (top - bottom);
        }
        return false;
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Leetcode 391. Perfect Rectangle

解题思想这道题是说给了一堆小矩形的坐标(左下角和右上角围成的),问其能否组合成一个完美的矩形(刚刚好,不多,不少,不交叉重复)。核心思想就是:能够正好围成一个矩形的情况就是: 有且只有: 最左下/...

[leetcode] 391. Perfect Rectangle 解题报告

题目链接:https://leetcode.com/problems/perfect-rectangle/ Given N axis-aligned rectangles where N > 0,...

【Leetcode】Find K Pairs with Smallest Sums

题目链接:https://leetcode.com/problems/find-k-pairs-with-smallest-sums/ 题目: You are given two integer ...
  • yeqiuzs
  • yeqiuzs
  • 2016年07月07日 15:13
  • 3471

378. Kth Smallest Element in a Sorted Matrix

Given a n x n matrix where each of the rows and columns are sorted in ascending order, find the kth ...

Leetcode 84. Largest Rectangle in Histogram 最大矩形 解题报告

1 解题思想这道题是说给了一个直方图,然后需要在里面找出一个最大的矩形。这道题的解题方式,就是要使用一个栈,保持一个持续上升的队列具体的请参照这个:http://blog.csdn.net/doc_s...
  • MebiuW
  • MebiuW
  • 2016年06月02日 10:41
  • 1564

Leetcode 85. Maximal Rectangle 最大矩形 解题报告

1 解题思想这道题我是转化成上一道题来做的,对于每一行,看成给一个直方图在每一行上,首先按照直方图的方式进行统计,然后记录并更新最大,因此计算请看: Leetcode 84. Largest Re...
  • MebiuW
  • MebiuW
  • 2016年06月02日 23:39
  • 864

Leetcode 391. Perfect Rectangle

想切题, 开个博客督促下自己。 但最近wrong answer的好心烦, 代码贴出来, 谁有空可以帮我挑挑bug。 题目: Given N axis-aligned rectangles wher...

【LeetCode】391. Perfect Rectangle

题目描述: Given N axis-aligned rectangles where N > 0, determine if they all together form an exact co...

[LeetCode] 279. Perfect Squares 解题报告

Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, ...
  • a921122
  • a921122
  • 2017年02月19日 03:04
  • 133

【LeetCode】Perfect Squares 解题报告

Perfect Squares[LeetCode]https://leetcode.com/problems/perfect-squares/Total Accepted: 15606 Total S...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Leetcode 391. Perfect Rectangle 完美矩形 解题报告
举报原因:
原因补充:

(最多只允许输入30个字)