给你一个二维整数数组 circles ,其中 circles[i] = [xi, yi, ri]
表示网格上圆心为 (xi, yi) 且半径为 ri 的第 i 个圆,返回出现在 至少一个 圆内的 格点数目 。
注意: 格点 是指整数坐标对应的点。 圆周上的点 也被视为出现在圆内的点。
示例 1:
输入:circles = [[2,2,1]]
输出:5
解释:
给定的圆如上图所示。
出现在圆内的格点为 (1, 2)、(2, 1)、(2, 2)、(2, 3) 和 (3, 2),在图中用绿色标识。
像 (1, 1) 和 (1, 3) 这样用红色标识的点,并未出现在圆内。
因此,出现在至少一个圆内的格点数目是 5 。
示例 2:
输入:circles = [[2,2,2],[3,4,1]]
输出:16
解释:
给定的圆如上图所示。
共有 16 个格点出现在至少一个圆内。
其中部分点的坐标是 (0, 2)、(2, 0)、(2, 4)、(3, 2) 和 (4, 4) 。
提示:
1 <= circles.length <= 200
circles[i].length == 3
1 <= xi, yi <= 100
1 <= ri <= min(xi, yi)
来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/count-lattice-points-inside-a-circle 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution:
def countLatticePoints(self, circles: List[List[int]]) -> int:
X = max(x+r for x,y,r in circles) # 最大的边界
Y = max(y+r for x,y,r in circles) # 最大的边界
ans = 0
circles.sort(key=lambda x: x[-1], reverse=True) # 半径大的先找
for x in range(X+1):
for y in range(Y+1):
for x0, y0, r in circles:
if (x-x0)*(x-x0) + (y-y0)*(y-y0) <= r*r:
ans += 1
break
return ans
872 ms 14.9 MB Python3