Leetcode 1401:圓和矩形是否有重疊(超詳細的解法!!!)

給你一個以 (radius, x_center, y_center) 表示的圓和一個與座標軸平行的矩形 (x1, y1, x2, y2),其中 (x1, y1) 是矩形左下角的座標,(x2, y2) 是右上角的座標。

如果圓和矩形有重疊的部分,請你返回True,否則返回False

換句話說,請你檢測是否 存在 點 (xi, yi) ,它既在圓上也在矩形上(兩者都包括點落在邊界上的情況)。

示例 1:

輸入:radius = 1, x_center = 0, y_center = 0, x1 = 1, y1 = -1, x2 = 3, y2 = 1
輸出:true
解釋:圓和矩形有公共點 (1,0) 

示例 2:

輸入:radius = 1, x_center = 0, y_center = 0, x1 = -1, y1 = 0, x2 = 0, y2 = 1
輸出:true

示例 3:

輸入:radius = 1, x_center = 1, y_center = 1, x1 = -3, y1 = -3, x2 = 3, y2 = 3
輸出:true

示例 4:

輸入:radius = 1, x_center = 1, y_center = 1, x1 = 1, y1 = -3, x2 = 2, y2 = -1
輸出:false 

提示:

  • 1 <= radius <= 2000
  • -10^4 <= x_center, y_center, x1, y1, x2, y2 <= 10^4
  • x1 < x2
  • y1 < y2

解題思路

知乎一位大佬的解釋非常好Milo Yip的回答,我就不班門弄斧了。

class Solution:
    def checkOverlap(self, r: int, xc: int, yc: int, x1: int, y1: int, x2: int, y2: int) -> bool:
        x, y = (x1 + x2) / 2, (y1 + y2) / 2
        h = [x2 - x, y2 - y]
        v = [abs(x - xc), abs(y - yc)]
        u = [max(v[0] - h[0], 0), max(v[1] - h[1], 0)]
        return r**2 >= (u[0]**2 + u[1]**2)

我將該問題的其他語言版本添加到了我的GitHub Leetcode

如有問題,希望大家指出!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章