返回

2069. 模拟行走机器人 II:脑筋急转弯类模拟题的解决方案和秘诀

后端

题目

  1. 模拟行走机器人 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'

基本思路和方法

这道题的本质是一个模拟题,我们需要根据给定的指令列表,模拟机器人的移动过程,并判断机器人是否最终回到原点。

解决这道题的基本思路是:

  1. 将机器人当前的位置初始化为 (0, 0),即网格的左上角。
  2. 遍历指令列表,对于每个指令,根据指令移动机器人。
  3. 如果机器人执行完所有指令后,回到原点,则返回 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。