[LeetCode] 391. 完美矩形

149 阅读1分钟

391. 完美矩形

解题思路

要构成完美矩形, 则所有矩形将构成一个无重复的,完整的矩形区域. 即所有矩形的面积等于完美矩形的面积 要确保重复, 则除了完美矩形的4个点,其他点则必出现2次或4次. 可以通过set来记录不重复出现的点的个数

代码

var isRectangleCover = function (rectangles) {
  let area = 0
  const points = new Set()
  let minX = Infinity
  let minY = Infinity
  let maxX = -Infinity
  let maxY = -Infinity

  rectangles.forEach(([x, y, a, b]) => {
    minX = Math.min(minX, x)
    minY = Math.min(minY, y)
    maxX = Math.max(maxX, a)
    maxY = Math.max(maxY, b)
    area += (a - x) * (b - y)
    ;[`${x}|${y}`, `${x}|${b}`, `${a}|${y}`, `${a}|${b}`].forEach((p) =>
      points.has(p) ? points.delete(p) : points.add(p),
    )
  })

  return (
    points.size === 4 &&
    (maxX - minX) * (maxY - minY) === area &&
    [`${maxX}|${minY}`, `${maxX}|${maxY}`, `${minX}|${minY}`, `${minX}|${maxY}`].every((p) => points.has(p))
  )
}