📅  最后修改于: 2023-12-03 15:37:46.420000             🧑  作者: Mango
给定正方形 $S$ 和一个整数 $K$,任务是找到所有位于正方形边界和内部,但是距离正方形边界的最近距离小于 $K$ 的点。正方形可以用一个左上角坐标 $(x_1, y_1)$ 和一个右下角坐标 $(x_2, y_2)$ 来描述。
首先,我们需要确定正方形的四条边的方程。
设正方形左上角的坐标为 $(x_1, y_1)$,右下角的坐标为 $(x_2, y_2)$。
接着,我们可以遍历整个正方形内部,将每一个点与四条边的距离计算出来,判断是否小于 $K$。具体算法如下:
时间复杂度为 $O((x_2 - x_1)(y_2 - y_1))$,即正方形内部的格子数。
空间复杂度为 $O(n)$,其中 $n$ 为满足条件的点的数量,即 $res$ 列表的长度。
def find_points(x1, y1, x2, y2, k):
res = []
for x in range(x1+1, x2):
for y in range(y1+1, y2):
d = min(y - y1, y2 - y, x - x1, x2 - x)
if d < k:
res.append((x, y))
return res
# 示例
print(find_points(0, 0, 5, 5, 2)) # [(2, 1), (1, 2), (4, 3), (3, 4)]