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);
}
}