657. 机器人能否返回原点
657. 机器人能否返回原点
题目
There is a robot starting at the position (0, 0)
, the origin, on a 2D plane. Given a sequence of its moves, judge if this robot ends up at(0, 0)
after it completes its moves.
You are given a string moves
that represents the move sequence of the robot where moves[i]
represents its ith
move. Valid moves are 'R'
(right), 'L'
(left), 'U'
(up), and 'D'
(down).
Return true
if the robot returns to the origin after it finishes all of its moves, orfalse
otherwise.
Note : The way that the robot is "facing" is irrelevant. 'R'
will always make the robot move to the right once, 'L'
will always make it move left, etc. Also, assume that the magnitude of the robot's movement is the same for each move.
Example 1:
Input: moves = "UD"
Output: true
Explanation : The robot moves up once, and then down once. All moves have the same magnitude, so it ended up at the origin where it started. Therefore, we return true.
Example 2:
Input: moves = "LL"
Output: false
Explanation : The robot moves left twice. It ends up two "moves" to the left of the origin. We return false because it is not at the origin at the end of its moves.
Constraints:
1 <= moves.length <= 2 * 10^4
moves
only contains the characters'U'
,'D'
,'L'
and'R'
.
题目大意
在二维平面上,有一个机器人从原点 (0, 0)
开始。给出它的移动顺序,判断这个机器人在完成移动后是否在** (0, 0)
处结束**。
移动顺序由字符串 moves
表示。字符 move[i]
表示其第 i
次移动。机器人的有效动作有 R
(右),L
(左),U
(上)和 D
(下)。
如果机器人在完成所有动作后返回原点,则返回 true
。否则,返回 false
。
注意: 机器人“面朝”的方向无关紧要。 “R”
将始终使机器人向右移动一次,“L”
将始终向左移动等。此外,假设每次移动机器人的移动幅度相同。
示例 1:
输入: moves = "UD"
输出: true
解释: 机器人向上移动一次,然后向下移动一次。所有动作都具有相同的幅度,因此它最终回到它开始的原点。因此,我们返回 true。
示例 2:
输入: moves = "LL"
输出: false
解释: 机器人向左移动两次。它最终位于原点的左侧,距原点有两次 “移动” 的距离。我们返回 false,因为它在移动结束时没有返回原点。
提示:
1 <= moves.length <= 2 * 10^4
moves
只包含字符'U'
,'D'
,'L'
和'R'
解题思路
- 初始化两个变量
x
和y
,表示当前位置的坐标,初始值为(0, 0)
。 - 遍历
moves
字符串,对于每个字符,根据其指示的方向更新坐标:'L'
:表示向左移动,x
坐标减 1(x--
)。'R'
:表示向右移动,x
坐标加 1(x++
)。'U'
:表示向上移动,y
坐标加 1(y++
)。'D'
:表示向下移动,y
坐标减 1(y--
)。
- 遍历结束后,检查
x
和y
是否都为 0。- 如果是,则返回
true
,表示回到了原点; - 否则,说明没有回到原点,返回
false
。
- 如果是,则返回
复杂度分析
- 时间复杂度:
O(n)
,其中n
是字符串moves
的长度,只需要遍历一次字符串。 - 空间复杂度:
O(1)
,只使用了常数空间来存储坐标。
代码
/**
* @param {string} moves
* @return {boolean}
*/
var judgeCircle = function (moves) {
let x = 0,
y = 0; // 初始化坐标为原点 (0, 0)
// 遍历 moves 字符串
for (let move of moves) {
if (move == 'L') {
// 向左移动,x 坐标减 1
x--;
} else if (move == 'R') {
// 向右移动,x 坐标加 1
x++;
} else if (move == 'D') {
// 向下移动,y 坐标减 1
y--;
} else if (move == 'U') {
// 向上移动,y 坐标加 1
y++;
}
}
// 如果 x 和 y 都是 0,则回到原点
return x == 0 && y == 0;
};
相关题目
题号 | 标题 | 题解 | 标签 | 难度 | 力扣 |
---|---|---|---|---|---|
547 | 省份数量 | [✓] | 深度优先搜索 广度优先搜索 并查集 1+ | 🟠 | 🀄️ 🔗 |
2120 | 执行所有后缀指令 | 字符串 模拟 | 🟠 | 🀄️ 🔗 | |
2833 | 距离原点最远的点 | 字符串 计数 | 🟢 | 🀄️ 🔗 |