python-leetcode-1496. 判断路径是否相交
·



可以通过模拟路径的移动来解决这个问题。具体的思路是:
-
从原点
(0, 0)开始,记录每次走过的位置。 -
遇到一个方向时,根据
N、S、E、W来更新当前位置。 -
如果当前的位置已经在之前走过的路径中出现过,则说明路径与自身相交,返回
true。 -
如果路径走完且没有相交的地方,返回
false。
可以用一个集合来记录所有走过的坐标,因为集合查找元素的时间复杂度是 O(1)。
代码实现
def isPathCrossing(path: str) -> bool:
# 定义一个集合来记录走过的坐标
visited = set()
# 初始位置是原点 (0, 0)
x, y = 0, 0
visited.add((x, y))
# 遍历路径
for direction in path:
if direction == 'N':
y += 1 # 向北移动
elif direction == 'S':
y -= 1 # 向南移动
elif direction == 'E':
x += 1 # 向东移动
elif direction == 'W':
x -= 1 # 向西移动
# 检查当前坐标是否已走过
if (x, y) in visited:
return True
visited.add((x, y))
# 如果没有相交,返回 False
return False
解释:
-
visited是一个集合,用来记录我们已经走过的所有坐标。 -
我们从
(0, 0)开始,按照路径中的每个字符来更新坐标。 -
如果当前坐标已经存在于
visited集合中,说明路径与自身相交,返回True。 -
如果遍历完整个路径都没有相交,最后返回
False。
示例
示例 1:
path = "NES"
print(isPathCrossing(path)) # 输出 False
在这个示例中,路径 N -> E -> S 没有交点,因此输出 False。
示例 2:
path = "NESWW"
print(isPathCrossing(path)) # 输出 True
在这个示例中,路径走到 (0, 0) 之前已经走过的位置,因此输出 True。
更多推荐
所有评论(0)