返回
2069. 模拟行走机器人 II:脑筋急转弯类模拟题的解决方案和秘诀
后端
2023-11-17 02:23:55
题目
- 模拟行走机器人 II
这是一个脑筋急转弯类型的模拟题。题目如下:
你有一个机器人,它位于一个 m x n 的网格中。机器人在网格中可以上下左右移动。给定一个字符串指令列表,其中每个字符代表一个方向('U' 表示向上,'D' 表示向下,'L' 表示向左,'R' 表示向右)。机器人将按照指令列表中的顺序逐个执行指令。
如果机器人执行完所有指令后,回到原点(即回到网格左上角的格子),则返回 true;否则,返回 false。
示例 1:
输入:m = 2, n = 3, instructions = "URR"
输出:true
解释:机器人在执行完所有指令后回到原点。
示例 2:
输入:m = 1, n = 3, instructions = "LRL"
输出:false
解释:机器人在执行完所有指令后没有回到原点。
提示:
- 1 <= m, n <= 100
- 1 <= instructions.length <= 1000
- instructions 只包含字符 'U', 'D', 'L' 和 'R'
基本思路和方法
这道题的本质是一个模拟题,我们需要根据给定的指令列表,模拟机器人的移动过程,并判断机器人是否最终回到原点。
解决这道题的基本思路是:
- 将机器人当前的位置初始化为 (0, 0),即网格的左上角。
- 遍历指令列表,对于每个指令,根据指令移动机器人。
- 如果机器人执行完所有指令后,回到原点,则返回 true;否则,返回 false。
为了实现上述思路,我们可以使用一个变量来记录机器人的当前位置,例如一个元组 (x, y)。然后,我们可以使用一个循环来遍历指令列表,对于每个指令,根据指令修改机器人的当前位置。最后,我们可以判断机器人的当前位置是否为 (0, 0),如果是,则返回 true;否则,返回 false。
代码示例和技巧
以下是这道题的 Python 代码示例:
def robot_sim(m, n, instructions):
"""
模拟机器人移动过程,并判断机器人是否最终回到原点。
参数:
m: 网格的行数。
n: 网格的列数。
instructions: 机器人移动指令列表。
返回:
如果机器人执行完所有指令后回到原点,则返回 true;否则,返回 false。
"""
# 机器人当前位置
x, y = 0, 0
# 遍历指令列表
for instruction in instructions:
# 根据指令移动机器人
if instruction == 'U':
y += 1
elif instruction == 'D':
y -= 1
elif instruction == 'L':
x -= 1
elif instruction == 'R':
x += 1
# 如果机器人越界,则返回 false
if x < 0 or x >= n or y < 0 or y >= m:
return False
# 如果机器人执行完所有指令后回到原点,则返回 true
return x == 0 and y == 0
# 测试代码
m = 2
n = 3
instructions = "URR"
result = robot_sim(m, n, instructions)
print(result) # True
m = 1
n = 3
instructions = "LRL"
result = robot_sim(m, n, instructions)
print(result) # False
在上面的代码示例中,我们使用了一个元组 (x, y) 来记录机器人的当前位置。我们使用了一个循环来遍历指令列表,对于每个指令,根据指令修改机器人的当前位置。最后,我们判断机器人的当前位置是否为 (0, 0),如果是,则返回 true;否则,返回 false。
这道题的技巧在于,我们需要考虑机器人的越界情况。如果机器人执行指令后越界,则说明机器人无法回到原点,因此我们需要返回 false。