• ㊗️
• 大家
• offer
• 多多！

## Problem

Given an array rectangles where rectangles[i] = [xi, yi, ai, bi] represents an axis-aligned rectangle. The bottom-left point of the rectangle is (xi, yi) and the top-right point of it is (ai, bi).

Return true if all the rectangles together form an exact cover of a rectangular region.

Example 1:

Input: rectangles = [[1,1,3,3],[3,1,4,2],[3,2,4,4],[1,3,2,4],[2,3,3,4]]
Output: true
Explanation: All 5 rectangles together form an exact cover of a rectangular region.


Example 2:

Input: rectangles = [[1,1,2,3],[1,3,2,4],[3,1,4,2],[3,2,4,4]]
Output: false
Explanation: Because there is a gap between the two rectangular regions.


Example 3:

Input: rectangles = [[1,1,3,3],[3,1,4,2],[1,3,2,4],[2,2,4,4]]
Output: false
Explanation: Because two of the rectangles overlap with each other.


## Code

class Solution {
public boolean isRectangleCover(int[][] rectangles) {
if(rectangles.length == 0 || rectangles[0].length == 0) return false;

int x1 = Integer.MAX_VALUE;
int x2 = Integer.MIN_VALUE;
int y1 = Integer.MAX_VALUE;
int y2 = Integer.MIN_VALUE;

// 放入hashset，第一次遇见加入，第二次遇见删除
// 最后剩下顶点
HashSet<String> set = new HashSet<>();

int area = 0;

for(int[] rect : rectangles){
x1 = Math.min(rect[0], x1);
y1 = Math.min(rect[1], y1);
x2 = Math.max(rect[2], x2);
y2 = Math.max(rect[3], y2);

area += (rect[2] - rect[0]) * (rect[3] - rect[1]);

String s1 = rect[0] + " " + rect[1];
String s2 = rect[0] + " " + rect[3];
String s3 = rect[2] + " " + rect[3];
String s4 = rect[2] + " " + rect[1];

}

if(!set.contains(x1 + " " + y1) ||
!set.contains(x1 + " " + y2) ||
!set.contains(x2 + " " + y1) ||
!set.contains(x2 + " " + y2) ||
set.size() != 4){
return false;
}

return area == (x2 - x1) * (y2 - y1);
}
}