难度:⭐
题目描述:
在二维平面上,有一个机器人从原点 (0, 0) 开始。给出它的移动顺序,判断这个机器人在完成移动后是否在 (0, 0) 处结束。
移动顺序由字符串表示。字符 move[i] 表示其第 i 次移动。机器人的有效动作有 R
(右),L
(左),U
(上)和 D
(下)。如果机器人在完成所有动作后返回原点,则返回 true。否则,返回 false。
注意:机器人“面朝”的方向无关紧要。 “R” 将始终使机器人向右移动一次,“L” 将始终向左移动等。此外,假设每次移动机器人的移动幅度相同。
示例1:
1 | 输入: "UD" |
示例2:
1 | 输入: "LL" |
解题过程:
思路:
直接模拟就好了,用(x,y)坐标表示,遍历字符串,如果是R字符则x加1,U表示y加1,最后判断x和y是否是0就可以了。
c++代码:(执行用时16ms,击败82.98%,内存消耗8.1M,击败16.74%)
1 | class Solution { |
官方题解:
方法一: 模拟
思路与算法
我们只需按指令模拟机器人移动的坐标即可。起始时机器人的坐标为 $(0,0)$,在遍历完所有指令并对机器人进行移动之后,判断机器人的坐标是否为 $(0,0)$ 即可。
具体来说,我们用两个变量 xx 和 yy 来表示机器人当前所在的坐标为 $(x,y)$,起始时 $x=0$,$y=0$。接下来我们遍历指令并更新机器人的坐标:
如果指令是 $U$,则令 $y=y-1$
如果指令是 $D$,则令 $y=y+1$
如果指令是 $L$,则令 $x=x-1$
如果指令是 $R$,则令 $x=x+1$
最后判断 $(x,y)$ 是否为 $(0,0)$即可。
c++代码:(执行用时12ms,击败97.42%,内存消耗8.3M,击败5.04%)
1 | class Solution { |
复杂度分析
时间复杂度: $O(N)$,其中 $N$ 表示 $\textit{moves}$ 指令串的长度。我们只需要遍历一遍字符串即可。
空间复杂度: $O(1)$。我们只需要常数的空间来存放若干变量。
总结:
官方题解和我的思路一样,不过有值得学习的地方。第一点可以改用增强for循环,第二点return返回时使用逻辑表达式,不像我用了if判断😆,题目还比较简单。