1401. 圆和矩形是否有重叠
大约 2 分钟
--- 

1401. 圆和矩形是否有重叠
- 标签:几何、数学
- 难度:中等
题目链接
题目大意
描述:给定圆 和一个轴对齐矩形 ,其中 是左下角, 是右上角。
要求:判断圆和矩形是否有重叠区域(包括边界)。
说明:
- 。
- 。
示例:
- 示例 1:

输入:radius = 1, xCenter = 0, yCenter = 0, x1 = 1, y1 = -1, x2 = 3, y2 = 1
输出:true
解释:圆和矩形存在公共点 (1,0) 。- 示例 2:
输入:radius = 1, xCenter = 1, yCenter = 1, x1 = 1, y1 = -3, x2 = 2, y2 = -1
输出:false- 示例 3:

输入:radius = 1, xCenter = 0, yCenter = 0, x1 = -1, y1 = 0, x2 = 0, y2 = 1
输出:true解题思路
思路 1:几何分析
1. 核心思想
圆和矩形有重叠,等价于圆心到矩形的最短距离 。
矩形区域为 。圆心 到矩形的最短距离为:
即:如果圆心在矩形内部(水平方向和垂直方向都在范围内),距离为 。否则,取水平和垂直方向上到矩形边界的最近距离。
2. 具体步骤
第 1 步:计算水平方向最近距离:
- 如果 ,最近距离为 。
- 如果 ,最近距离为 。
- 否则最近距离为 。
第 2 步:垂直方向同理。
第 3 步:计算 。返回 。
3. 举例说明
以 ,矩形 为例:
圆心在矩形内部 → → 重叠。
以 ,矩形 为例:
水平最近距离:
垂直最近距离: 在 内 →
→ 重叠。
思路 1:代码
class Solution:
def checkOverlap(self, radius: int, x_center: int, y_center: int,
x1: int, y1: int, x2: int, y2: int) -> bool:
# 水平方向最近距离
if x_center < x1:
h = x1 - x_center
elif x_center > x2:
h = x_center - x2
else:
h = 0
# 垂直方向最近距离
if y_center < y1:
v = y1 - y_center
elif y_center > y2:
v = y_center - y2
else:
v = 0
return h * h + v * v <= radius * radius思路 1:复杂度分析
- 时间复杂度:。
- 空间复杂度:。