1496. 判断路径是否相交 - 力扣(LeetCode)

可以通过模拟路径的移动来解决这个问题。具体的思路是:

  1. 从原点 (0, 0) 开始,记录每次走过的位置。

  2. 遇到一个方向时,根据 NSEW 来更新当前位置。

  3. 如果当前的位置已经在之前走过的路径中出现过,则说明路径与自身相交,返回 true

  4. 如果路径走完且没有相交的地方,返回 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

解释:

  1. visited 是一个集合,用来记录我们已经走过的所有坐标。

  2. 我们从 (0, 0) 开始,按照路径中的每个字符来更新坐标。

  3. 如果当前坐标已经存在于 visited 集合中,说明路径与自身相交,返回 True

  4. 如果遍历完整个路径都没有相交,最后返回 False

示例

示例 1:
path = "NES"
print(isPathCrossing(path))  # 输出 False

在这个示例中,路径 N -> E -> S 没有交点,因此输出 False

示例 2:
path = "NESWW"
print(isPathCrossing(path))  # 输出 True

在这个示例中,路径走到 (0, 0) 之前已经走过的位置,因此输出 True

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐