[LeetCode]391. Perfect Rectangle

来源:互联网 发布:网络中文教师 编辑:程序博客网 时间:2024/06/05 19:30

https://leetcode.com/problems/perfect-rectangle/#/description

给一组矩形,矩形由右下和左上两个点确定唯一,判断这些矩形组合而成是否还是矩形





true的条件有两个:1、每个矩形的size和为大矩形四个点计算的和;2、set中只有四个点,而且这四个点是x1/x2/y1/y2所确定的点

每个矩形四个点加到set中,遇到重复就移除。

public class Solution {    public boolean isRectangleCover(int[][] rectangles) {        HashSet<String> set = new HashSet();        int x1 = Integer.MAX_VALUE;        int y1 = Integer.MAX_VALUE;        int x2 = Integer.MIN_VALUE;        int y2 = Integer.MIN_VALUE;        int area = 0;        for (int[] rec : rectangles) {            x1 = Math.min(rec[0], x1);            y1 = Math.min(rec[1], y1);            x2 = Math.max(rec[2], x2);            y2 = Math.max(rec[3], y2);            area += (rec[2] - rec[0]) * (rec[3] - rec[1]);            String s1 = rec[0] + " " + rec[3];            String s2 = rec[0] + " " + rec[1];            String s3 = rec[2] + " " + rec[1];            String s4 = rec[2] + " " + rec[3];            if (!set.add(s1)) {                set.remove(s1);            }            if (!set.add(s2)) {                set.remove(s2);            }            if (!set.add(s3)) {                set.remove(s3);            }            if (!set.add(s4)) {                set.remove(s4);            }        }        if (!set.contains(x1 + " " + y1) || !set.contains(x2 + " " + y1) || !set.contains(x1 + " " + y2) || !set.contains(x2 + " " + y2) || set.size() != 4) {            return false;        }        return area == (x2 - x1) * (y2 - y1);    }}


0 0
原创粉丝点击