- 477. leetcode题目讲解(Python):在圆内随机生
- 383.leetcode题目讲解(Python):链表随机节点(
- 519. leetcode题目讲解(Python):随机翻转矩阵
- 528.leetcode题目讲解(Python):按权重随机选择
- 398.leetcode题目讲解(Python):随机数索引(R
- 力扣每日一题:477.汉明距离总和 字符串矩阵与列表计数器 双解
- 478. 在圆内随机生成点(Python)
- 710.leetcode题目讲解(Python):黑名单中的随机
- 38.leetcode题目讲解(Python): 报数
- leetcode题目答案讲解汇总(Python版 持续更新)
题目如下:
![](https://img.haomeiwen.com/i1369466/cbfef74b69334eb0.png)
我们可以获取的信息为:圆心坐标(x,y),半径。 所以,我们可以取得随机点的坐标范围:
x : [x-r, x+r]
y : [y-r, y+r]
从图形上表示,我们可以获取一个正方形的范围,如下图所示:
![](https://img.haomeiwen.com/i1369466/2eb89fbf297d1dcf.png)
因此通过random.uniform我们可以生成正方形内(包括边上)的随机点。但题目要求的是生成圆内的随机点, 于是生成随机点后可以通过点到圆心的距离来判断随机点是否在圆内,如果不在圆内,就抛弃该结果,重新生成。
参考代码如下:
import random
class Solution:
def __init__(self, radius: 'float', x_center: 'float', y_center: 'float'):
self.radius = radius
self.x_center = x_center
self.y_center = y_center
self.x_max = x_center + radius
self.y_max = y_center + radius
self.x_min = x_center - radius
self.y_min = y_center - radius
def randPoint(self) -> 'List[float]':
while True:
res_x = random.uniform(self.x_min, self.x_max)
res_y = random.uniform(self.y_min, self.y_max)
dis = (res_x - self.x_center)**2 + (res_y - self.y_center)**2
if dis <= self.radius**2:
return [res_x, res_y]
源码地址:
https://github.com/jediL/LeetCodeByPython
其它题目:[leetcode题目答案讲解汇总(Python版 持续更新)]
(https://www.jianshu.com/p/60b5241ca28e)
ps:如果您有好的建议,欢迎交流 :-D,
也欢迎访问我的个人博客 苔原带 (www.tundrazone.com)
网友评论