mirror of
https://gitee.com/coder-xiaomo/leetcode-problemset
synced 2025-01-11 02:58:13 +08:00
59 lines
3.5 KiB
HTML
59 lines
3.5 KiB
HTML
<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>
|
||
<li><code>void move(int num)</code> 给机器人下达前进 <code>num</code> 步的指令。</li>
|
||
<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>
|
||
|
||
<p><img alt="example-1" src="https://assets.leetcode.com/uploads/2021/10/09/example-1.png" style="width: 498px; height: 268px;"></p>
|
||
|
||
<pre><strong>输入:</strong>
|
||
["Robot", "move", "move", "getPos", "getDir", "move", "move", "move", "getPos", "getDir"]
|
||
[[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) ,朝东。
|
||
robot.move(2); // 机器人朝东移动 2 步,到达 (2, 0) ,并朝东。
|
||
robot.move(2); // 机器人朝东移动 2 步,到达 (4, 0) ,并朝东。
|
||
robot.getPos(); // 返回 [4, 0]
|
||
robot.getDir(); // 返回 "East"
|
||
robot.move(2); // 朝东移动 1 步到达 (5, 0) ,并朝东。
|
||
// 下一步继续往东移动将出界,所以逆时针转变方向朝北。
|
||
// 然后,往北移动 1 步到达 (5, 1) ,并朝北。
|
||
robot.move(1); // 朝北移动 1 步到达 (5, 2) ,并朝 <strong>北</strong> (不是朝西)。
|
||
robot.move(4); // 下一步继续往北移动将出界,所以逆时针转变方向朝西。
|
||
// 然后,移动 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>
|
||
<li><code>move</code> ,<code>getPos</code> 和 <code>getDir</code> <strong>总共 </strong>调用次数不超过 <code>10<sup>4</sup></code> 次。</li>
|
||
</ul>
|