2022-03-27 20:38:29 +08:00
< p > 给你一个在 XY 平面上的 < code > width x height< / code > 的网格图,< strong > 左下角< / strong > 的格子为 < code > (0, 0)< / code > , < strong > 右上角< / strong > 的格子为 < code > (width - 1, height - 1)< / code > 。网格图中相邻格子为四个基本方向之一(< code > "North"< / code > , < code > "East"< / code > , < code > "South"< / code > 和 < code > "West"< / code > )。一个机器人 < strong > 初始< / strong > 在格子 < code > (0, 0)< / code > ,方向为 < code > "East"< / code > 。< / p >
< p > 机器人可以根据指令移动指定的 < strong > 步数< / strong > 。每一步,它可以执行以下操作。< / p >
< ol >
< li > 沿着当前方向尝试 < strong > 往前一步< / strong > 。< / li >
< li > 如果机器人下一步将到达的格子 < strong > 超出了边界< / strong > ,机器人会 < strong > 逆时针< / strong > 转 90 度,然后再尝试往前一步。< / li >
< / ol >
< p > 如果机器人完成了指令要求的移动步数,它将停止移动并等待下一个指令。< / p >
< p > 请你实现 < code > Robot< / code > 类:< / p >
< ul >
< li > < code > Robot(int width, int height)< / code > 初始化一个 < code > width x height< / code > 的网格图,机器人初始在 < code > (0, 0)< / code > ,方向朝 < code > "East"< / code > 。< / li >
2023-12-09 18:42:21 +08:00
< li > < code > void step(int num)< / code > 给机器人下达前进 < code > num< / code > 步的指令。< / li >
2022-03-27 20:38:29 +08:00
< li > < code > int[] getPos()< / code > 返回机器人当前所处的格子位置,用一个长度为 2 的数组 < code > [x, y]< / code > 表示。< / li >
< li > < code > String getDir()< / code > 返回当前机器人的朝向,为 < code > "North"< / code > , < code > "East"< / code > , < code > "South"< / code > 或者 < code > "West"< / code > 。< / li >
< / ul >
< p > < / p >
< p > < strong > 示例 1: < / strong > < / p >
2023-12-09 18:42:21 +08:00
< p > < img alt = "example-1" src = "https://assets.leetcode.com/uploads/2021/10/09/example-1.png" style = "width: 498px; height: 268px;" / > < / p >
2022-03-27 20:38:29 +08:00
2023-12-09 18:42:21 +08:00
< pre >
< strong > 输入:< / strong >
["Robot", "step", "step", "getPos", "getDir", "step", "step", "step", "getPos", "getDir"]
2022-03-27 20:38:29 +08:00
[[6, 3], [2], [2], [], [], [2], [1], [4], [], []]
< strong > 输出:< / strong >
[null, null, null, [4, 0], "East", null, null, null, [1, 2], "West"]
< strong > 解释:< / strong >
Robot robot = new Robot(6, 3); // 初始化网格图,机器人在 (0, 0) ,朝东。
2023-12-09 18:42:21 +08:00
robot.step(2); // 机器人朝东移动 2 步,到达 (2, 0) ,并朝东。
robot.step(2); // 机器人朝东移动 2 步,到达 (4, 0) ,并朝东。
2022-03-27 20:38:29 +08:00
robot.getPos(); // 返回 [4, 0]
robot.getDir(); // 返回 "East"
2023-12-09 18:42:21 +08:00
robot.step(2); // 朝东移动 1 步到达 (5, 0) ,并朝东。
2022-03-27 20:38:29 +08:00
// 下一步继续往东移动将出界,所以逆时针转变方向朝北。
// 然后,往北移动 1 步到达 (5, 1) ,并朝北。
2023-12-09 18:42:21 +08:00
robot.step(1); // 朝北移动 1 步到达 (5, 2) ,并朝 < strong > 北< / strong > (不是朝西)。
robot.step(4); // 下一步继续往北移动将出界,所以逆时针转变方向朝西。
2022-03-27 20:38:29 +08:00
// 然后,移动 4 步到 (1, 2) ,并朝西。
robot.getPos(); // 返回 [1, 2]
robot.getDir(); // 返回 "West"
< / pre >
< p > < / p >
< p > < strong > 提示:< / strong > < / p >
< ul >
< li > < code > 2 < = width, height < = 100< / code > < / li >
< li > < code > 1 < = num < = 10< sup > 5< / sup > < / code > < / li >
2023-12-09 18:42:21 +08:00
< li > < code > step< / code > , < code > getPos< / code > 和 < code > getDir< / code > < strong > 总共 < / strong > 调用次数不超过 < code > 10< sup > 4< / sup > < / code > 次。< / li >
2022-03-27 20:38:29 +08:00
< / ul >