给你一个以 (radius, xCenter, yCenter) 表示的圆和一个与坐标轴平行的矩形 (x1, y1, x2, y2) ,其中 (x1, y1) 是矩形左下角的坐标,而 (x2, y2) 是右上角的坐标。
如果圆和矩形有重叠的部分,请你返回 true ,否则返回 false 。
换句话说,请你检测是否 存在 点 (xi, yi) ,它既在圆上也在矩形上(两者都包括点落在边界上的情况)。
示例 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 <= radius <= 2000-10^4 <= xCenter, yCenter <= 10^4-10^4 <= x1 < x2 <= 10^4-10^4 <= y1 < y2 <= 10^4
分析:分类讨论。判断圆与矩形的四条边是否有相交,再判断圆是否与矩形的四个角有重叠部分。
cpp
bool checkOverlap(int radius, int xCenter, int yCenter, int x1, int y1, int x2, int y2) {
if(yCenter+radius<y1||yCenter-radius>y2||xCenter+radius<x1||xCenter-radius>x2)return false;
if((xCenter<=x1&&yCenter<=y1)&&radius*radius<(x1-xCenter)*(x1-xCenter)+(y1-yCenter)*(y1-yCenter))return false;
if((xCenter>=x2&&yCenter>=y2)&&radius*radius<(x2-xCenter)*(x2-xCenter)+(y2-yCenter)*(y2-yCenter))return false;
if((xCenter<=x1&&yCenter>=y2)&&radius*radius<(x1-xCenter)*(x1-xCenter)+(y2-yCenter)*(y2-yCenter))return false;
if((xCenter>=x2&&yCenter<=y1)&&radius*radius<(x2-xCenter)*(x2-xCenter)+(y1-yCenter)*(y1-yCenter))return false;
return true;
}