LeetCode 题解工作台

困于环中的机器人

在无限的平面上,机器人最初位于 (0, 0) 处,面朝北方。注意: 北方向 是y轴的正方向。 南方向 是y轴的负方向。 东方向 是x轴的正方向。 西方向 是x轴的负方向。 机器人可以接受下列三条指令之一: "G" :直走 1 个单位 "L" :左转 90 度 "R" :右转 90 度 机器人按顺序执…

category

3

题型

code_blocks

5

代码语言

hub

3

相关题

当前训练重点

中等 · 数学·string

bolt

答案摘要

我们可以模拟机器人的行走过程,用一个变量 表示机器人的方向,初始值为 ,表示机器人面向北方。变量 的取值范围为 $[0, 3]$,分别表示机器人面向北、西、南、东。另外,我们用一个长度为 的数组 记录机器人在四个方向上行走的距离,初始值为 $[0, 0, 0, 0]$。 遍历指令字符串 ,如果当前指令为 `'L'`,那么机器人转向西方,即 $k = (k + 1) \bmod 4$;如果当…

Interview AiBox logo

Interview AiBox 实时 AI 助手,陪你讲清 数学·string 题型思路

试试 AiBox 面试助手arrow_forward
description

题目描述

在无限的平面上,机器人最初位于 (0, 0) 处,面朝北方。注意:

  • 北方向 是y轴的正方向。
  • 南方向 是y轴的负方向。
  • 东方向 是x轴的正方向。
  • 西方向 是x轴的负方向。

机器人可以接受下列三条指令之一:

  • "G":直走 1 个单位
  • "L":左转 90 度
  • "R":右转 90 度

机器人按顺序执行指令 instructions,并一直重复它们。

只有在平面中存在环使得机器人永远无法离开时,返回 true。否则,返回 false

 

示例 1:

输入:instructions = "GGLLGG"
输出:true
解释:机器人最初在(0,0)处,面向北方。
“G”:移动一步。位置:(0,1)方向:北。
“G”:移动一步。位置:(0,2).方向:北。
“L”:逆时针旋转90度。位置:(0,2).方向:西。
“L”:逆时针旋转90度。位置:(0,2)方向:南。
“G”:移动一步。位置:(0,1)方向:南。
“G”:移动一步。位置:(0,0)方向:南。
重复指令,机器人进入循环:(0,0)——>(0,1)——>(0,2)——>(0,1)——>(0,0)。
在此基础上,我们返回true。

示例 2:

输入:instructions = "GG"
输出:false
解释:机器人最初在(0,0)处,面向北方。
“G”:移动一步。位置:(0,1)方向:北。
“G”:移动一步。位置:(0,2).方向:北。
重复这些指示,继续朝北前进,不会进入循环。
在此基础上,返回false。

示例 3:

输入:instructions = "GL"
输出:true
解释:机器人最初在(0,0)处,面向北方。
“G”:移动一步。位置:(0,1)方向:北。
“L”:逆时针旋转90度。位置:(0,1).方向:西。
“G”:移动一步。位置:(- 1,1)方向:西。
“L”:逆时针旋转90度。位置:(- 1,1)方向:南。
“G”:移动一步。位置:(- 1,0)方向:南。
“L”:逆时针旋转90度。位置:(- 1,0)方向:东方。
“G”:移动一步。位置:(0,0)方向:东方。
“L”:逆时针旋转90度。位置:(0,0)方向:北。
重复指令,机器人进入循环:(0,0)——>(0,1)——>(- 1,1)——>(- 1,0)——>(0,0)。
在此基础上,我们返回true。

 

提示:

  • 1 <= instructions.length <= 100
  • instructions[i] 仅包含 'G', 'L', 'R'
lightbulb

解题思路

方法一:模拟

我们可以模拟机器人的行走过程,用一个变量 kk 表示机器人的方向,初始值为 00,表示机器人面向北方。变量 kk 的取值范围为 [0,3][0, 3],分别表示机器人面向北、西、南、东。另外,我们用一个长度为 44 的数组 distdist 记录机器人在四个方向上行走的距离,初始值为 [0,0,0,0][0, 0, 0, 0]

遍历指令字符串 instructions\textit{instructions},如果当前指令为 'L',那么机器人转向西方,即 k=(k+1)mod4k = (k + 1) \bmod 4;如果当前指令为 'R',那么机器人转向东方,即 k=(k+3)mod4k = (k + 3) \bmod 4;否则,机器人在当前方向上行走一步,即 dist[k]++dist[k]++

如果给定的指令字符串 instructions\textit{instructions} 执行一遍后,使得机器人最终回到原点,即 dist[0]=dist[2]dist[0] = dist[2]dist[1]=dist[3]dist[1] = dist[3],那么机器人一定会进入循环。因为无论重复多少次指令,机器人都回到了原点,所以机器人一定会进入循环。

如果给定的指令字符串 instructions\textit{instructions} 执行一遍后,机器人没回到原点,不妨假设此时机器人位于 (x,y)(x, y),且方向为 kk

  • k=0k=0,即机器人面向北方,那么执行第二遍指令后,坐标变化量是 (x,y)(x, y);继续执行第三遍指令后,坐标变化量还是 (x,y)(x, y)...累加这些变化量,机器人最终会到 (n×x,n×y)(n \times x, n \times y),其中 nn 是一个正整数。由于机器人最终没有回到原点,即 x0x \neq 0y0y \neq 0,所以 n×x0n \times x \neq 0n×y0n \times y \neq 0,因此机器人不会进入循环;
  • k=1k=1,即机器人面向西方,那么机器人执行第二遍指令后,坐标变化量是 (y,x)(-y, x);继续执行第三遍执行后,坐标变化量是 (x,y)(-x, -y);继续执行第四遍指令后,坐标变化量是 (y,x)(y, -x)。累加这些坐标变化量,我们可以发现,机器人最终会回到原点 (0,0)(0, 0)
  • k=2k=2,即机器人面向南方,那么执行第二遍指令后,坐标变化量是 (x,y)(-x, -y),累加这两次坐标变化量,我们可以发现,机器人最终会回到原点 (0,0)(0, 0)
  • k=3k=3,即机器人面向东方,那么执行第二遍指令后,坐标变化量是 (y,x)(y, -x);继续执行第三遍指令后,坐标变化量是 (x,y)(-x, -y);继续执行第四遍指令后,坐标变化量是 (y,x)(-y, x)。累加这些坐标变化量,我们可以发现,机器人最终会回到原点 (0,0)(0, 0)

综上所述,如果给定的指令字符串 instructions\textit{instructions} 执行一遍后,机器人回到了原点,或者机器人的方向与初始方向不同,那么机器人一定会进入循环。

时间复杂度 O(n)O(n),空间复杂度 O(1)O(1)。其中 nn 为指令字符串 instructions\textit{instructions} 的长度。

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution:
    def isRobotBounded(self, instructions: str) -> bool:
        k = 0
        dist = [0] * 4
        for c in instructions:
            if c == 'L':
                k = (k + 1) % 4
            elif c == 'R':
                k = (k + 3) % 4
            else:
                dist[k] += 1
        return (dist[0] == dist[2] and dist[1] == dist[3]) or k != 0
speed

复杂度分析

指标
时间complexity is O(n) for parsing the instruction string of length n, with constant time updates per instruction. Space complexity is O(1) since only position and direction counters are maintained without storing full paths.
空间Depends on the final approach
psychology

面试官常问的追问

外企场景
  • question_mark

    Asks if robot returns to origin or changes direction after one instruction pass.

  • question_mark

    Mentions efficiency in detecting infinite movement without full simulation.

  • question_mark

    Hints at combining string parsing with vector math to predict cyclic behavior.

warning

常见陷阱

外企场景
  • error

    Failing to consider orientation change as a bounding factor, not just returning to origin.

  • error

    Incorrectly simulating infinite repetitions instead of analyzing one full cycle.

  • error

    Misupdating coordinates or direction when turning 'L' or 'R', leading to wrong conclusions.

swap_horiz

进阶变体

外企场景
  • arrow_right_alt

    Check bounded movement for 3D plane with rotations in multiple axes.

  • arrow_right_alt

    Allow variable step sizes for 'G' and determine bounded trajectories.

  • arrow_right_alt

    Include diagonal movement commands and assess cycle closure using vector math.

help

常见问题

外企场景

困于环中的机器人题解:数学·string | LeetCode #1041 中等