836.矩形重叠

248 阅读2分钟

前言:剑指offer刷题系列

问题:

矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标。矩形的上下边平行于 x 轴,左右边平行于 y 轴。

如果相交的面积为 ,则称两矩形重叠。需要明确的是,只在角或边接触的两个矩形不构成重叠。

给出两个矩形 rec1rec2 。如果它们重叠,返回 true;否则,返回 false

示例:

输入:rec1 = [0,0,2,2], rec2 = [1,1,3,3]
输出:true

思路:

其实满足矩阵重叠的条件只有两个:

  1. rec2左下角的坐标在 rec1右上角坐标的下方

  2. rec2右上角的坐标在rec1左下角坐标的上方

    下面是具体思考:

    先去检查 rec2 的左下角的 x 坐标(rec2[0])是否小于 rec1 的右上角的 x 坐标(rec1[2]),这是在 x 轴上检查两个矩形是否存在水平重叠的条件。

    接着,代码检查 rec2 的右上角的 x 坐标(rec2[2])是否大于 rec1 的左下角的 x 坐标(rec1[0]),这是在 x 轴上的另一个检查条件。同时,还检查 rec2 的右上角的 y 坐标(rec2[3])是否大于 rec1 的左下角的 y 坐标(rec1[1]),这是在 y 轴上的检查条件。

    如果上述两个条件都满足,即 rec2 在 x 轴和 y 轴上都与 rec1 重叠,那么条件成立,返回 True,表示两个矩形重叠。

    如果上述条件有任何一个不满足,即 rec2 不与 rec1 在 x 轴或 y 轴上重叠,那么条件不成立,返回 False,表示两个矩形不重叠。

基于上述思考,代码如下:

class Solution:
    def isRectangleOverlap(self, rec1: List[int], rec2: List[int]) -> bool:
       if (rec2[0]<rec1[2] and rec2[1]<rec1[3]) and (rec2[2]>rec1[0] and rec2[3]>rec1[1]):
           return True
       else:
           return False

这个代码片段的核心思想是通过检查矩形的边界条件来确定它们是否重叠。如果两个矩形在 x 轴和 y 轴上都有交集,那么它们就重叠,否则它们不重叠。

执行结果如下图:

image-20230922205417303.png

  1. 矩形表示: 代码中使用了列表来表示矩形,其中每个列表包含四个整数,分别表示矩形的左下角和右上角的坐标。
  2. 矩形重叠判断: 代码演示了如何判断两个矩形是否重叠,去比较两个矩形在 x 轴和 y 轴上的边界情况。