圆和矩形是否有重叠【LC1401】
给你一个以 (radius, xCenter, yCenter)
表示的圆和一个与坐标轴平行的矩形 (x1, y1, x2, y2)
,其中 (x1, y1)
是矩形左下角的坐标,而 (x2, y2)
是右上角的坐标。
如果圆和矩形有重叠的部分,请你返回 true
,否则返回 false
。
换句话说,请你检测是否 存在 点 (xi, yi)
,它既在圆上也在矩形上(两者都包括点落在边界上的情况)。
- 思路
题意可以转化为矩形区域内有点在圆形区域中,如果一个点在圆形内,那么其至圆心的距离小于等于半径。那么我们可以找到横坐标的平方+纵坐标的平方到圆心的距离最小值对应的点,如果其在圆内,那么表示圆和矩形有相交区域 - 实现
class Solution { public boolean checkOverlap( int radius, int xCenter, int yCenter, int x1, int y1, int x2, int y2) { int a = f(x1, x2, xCenter); int b = f(y1, y2, yCenter); return a * a + b * b <= radius * radius; } private int f(int i, int j, int k) { if (i <= k && k <= j) { return 0; } return k < i ? i - k : k - j; } } 作者:ylb 链接:https://leetcode.cn/problems/circle-and-rectangle-overlapping/solutions/2319357/python3javacgotypescript-yi-ti-yi-jie-sh-vpsu/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
复杂度
- 时间复杂度:O(1)
- 空间复杂度:O(1)