LeetCode 题解工作台
困于环中的机器人
在无限的平面上,机器人最初位于 (0, 0) 处,面朝北方。注意: 北方向 是y轴的正方向。 南方向 是y轴的负方向。 东方向 是x轴的正方向。 西方向 是x轴的负方向。 机器人可以接受下列三条指令之一: "G" :直走 1 个单位 "L" :左转 90 度 "R" :右转 90 度 机器人按顺序执…
3
题型
5
代码语言
3
相关题
当前训练重点
中等 · 数学·string
答案摘要
我们可以模拟机器人的行走过程,用一个变量 表示机器人的方向,初始值为 ,表示机器人面向北方。变量 的取值范围为 $[0, 3]$,分别表示机器人面向北、西、南、东。另外,我们用一个长度为 的数组 记录机器人在四个方向上行走的距离,初始值为 $[0, 0, 0, 0]$。 遍历指令字符串 ,如果当前指令为 `'L'`,那么机器人转向西方,即 $k = (k + 1) \bmod 4$;如果当…
Interview AiBoxInterview AiBox 实时 AI 助手,陪你讲清 数学·string 题型思路
题目描述
在无限的平面上,机器人最初位于 (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 <= 100instructions[i]仅包含'G', 'L', 'R'
解题思路
方法一:模拟
我们可以模拟机器人的行走过程,用一个变量 表示机器人的方向,初始值为 ,表示机器人面向北方。变量 的取值范围为 ,分别表示机器人面向北、西、南、东。另外,我们用一个长度为 的数组 记录机器人在四个方向上行走的距离,初始值为 。
遍历指令字符串 ,如果当前指令为 'L',那么机器人转向西方,即 ;如果当前指令为 'R',那么机器人转向东方,即 ;否则,机器人在当前方向上行走一步,即 。
如果给定的指令字符串 执行一遍后,使得机器人最终回到原点,即 且 ,那么机器人一定会进入循环。因为无论重复多少次指令,机器人都回到了原点,所以机器人一定会进入循环。
如果给定的指令字符串 执行一遍后,机器人没回到原点,不妨假设此时机器人位于 ,且方向为 。
- 若 ,即机器人面向北方,那么执行第二遍指令后,坐标变化量是 ;继续执行第三遍指令后,坐标变化量还是 ...累加这些变化量,机器人最终会到 ,其中 是一个正整数。由于机器人最终没有回到原点,即 或 ,所以 或 ,因此机器人不会进入循环;
- 若 ,即机器人面向西方,那么机器人执行第二遍指令后,坐标变化量是 ;继续执行第三遍执行后,坐标变化量是 ;继续执行第四遍指令后,坐标变化量是 。累加这些坐标变化量,我们可以发现,机器人最终会回到原点 ;
- 若 ,即机器人面向南方,那么执行第二遍指令后,坐标变化量是 ,累加这两次坐标变化量,我们可以发现,机器人最终会回到原点 ;
- 若 ,即机器人面向东方,那么执行第二遍指令后,坐标变化量是 ;继续执行第三遍指令后,坐标变化量是 ;继续执行第四遍指令后,坐标变化量是 。累加这些坐标变化量,我们可以发现,机器人最终会回到原点 。
综上所述,如果给定的指令字符串 执行一遍后,机器人回到了原点,或者机器人的方向与初始方向不同,那么机器人一定会进入循环。
时间复杂度 ,空间复杂度 。其中 为指令字符串 的长度。
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
复杂度分析
| 指标 | 值 |
|---|---|
| 时间 | 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 |
面试官常问的追问
外企场景- 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.
常见陷阱
外企场景- 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.
进阶变体
外企场景- 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.