本文主要是介绍[leetcode]836.矩形重叠,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前言:剑指offer刷题系列
问题:
矩形以列表 [x1, y1, x2, y2]
的形式表示,其中 (x1, y1)
为左下角的坐标,(x2, y2)
是右上角的坐标。矩形的上下边平行于 x 轴,左右边平行于 y 轴。
如果相交的面积为 正 ,则称两矩形重叠。需要明确的是,只在角或边接触的两个矩形不构成重叠。
给出两个矩形 rec1
和 rec2
。如果它们重叠,返回 true
;否则,返回 false
。
示例:
输入:rec1 = [0,0,2,2], rec2 = [1,1,3,3]
输出:true
思路:
其实满足矩阵重叠的条件只有两个:
-
rec2左下角的坐标在 rec1右上角坐标的下方
-
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 Trueelse:return False
这个代码片段的核心思想是通过检查矩形的边界条件来确定它们是否重叠。如果两个矩形在 x 轴和 y 轴上都有交集,那么它们就重叠,否则它们不重叠。
执行结果如下图:
- 矩形表示: 代码中使用了列表来表示矩形,其中每个列表包含四个整数,分别表示矩形的左下角和右上角的坐标。
- 矩形重叠判断: 代码演示了如何判断两个矩形是否重叠,去比较两个矩形在 x 轴和 y 轴上的边界情况。
这篇关于[leetcode]836.矩形重叠的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!