机器人能否返回原点
难度:
标签:
题目描述
代码结果
运行时间: 22 ms, 内存: 16.1 MB
/*
题目思路:
我们可以通过计算机器人每次移动后的坐标变化来判断它是否回到原点。每次向右(R)移动时,x 坐标加 1,向左(L)移动时,x 坐标减 1;
向上(U)移动时,y 坐标加 1,向下(D)移动时,y 坐标减 1。如果所有移动结束后,x 和 y 坐标都为 0,那么机器人返回了原点。
使用 Java Stream API 可以更加简洁地实现坐标的计算。
*/
import java.util.stream.*;
public class RobotReturnToOriginStream {
public boolean judgeCircle(String moves) {
int x = moves.chars().map(c -> c == 'R' ? 1 : c == 'L' ? -1 : 0).sum();
int y = moves.chars().map(c -> c == 'U' ? 1 : c == 'D' ? -1 : 0).sum();
return x == 0 && y == 0;
}
}
解释
方法:
该题解通过计算移动序列中每个方向的移动次数来判断机器人是否返回原点。具体来说,只有当向右('R')的移动次数等于向左('L')的移动次数,并且向上('U')的移动次数等于向下('D')的移动次数时,机器人才会回到原点。这是因为每一次向某个方向的移动都需要被相反方向的同等次数的移动来抵消,从而使得最终的位置仍然是 (0, 0)。
时间复杂度:
O(n)
空间复杂度:
O(1)
代码细节讲解
🦆
为什么在这种情况下计数而不是模拟每一步的移动来确定机器人的最终位置?
▷🦆
在计算字符出现次数时,使用`str.count()`方法是否会有性能考虑,特别是在`moves`字符串非常长的情况下?
▷🦆
如果输入中包含无效字符(即不是 'R', 'L', 'U', 'D'),此算法是否仍然有效?
▷相关问题
省份数量
有 n
个城市,其中一些彼此相连,另一些没有相连。如果城市 a
与城市 b
直接相连,且城市 b
与城市 c
直接相连,那么城市 a
与城市 c
间接相连。
省份 是一组直接或间接相连的城市,组内不含其他没有相连的城市。
给你一个 n x n
的矩阵 isConnected
,其中 isConnected[i][j] = 1
表示第 i
个城市和第 j
个城市直接相连,而 isConnected[i][j] = 0
表示二者不直接相连。
返回矩阵中 省份 的数量。
示例 1:

输入:isConnected = [[1,1,0],[1,1,0],[0,0,1]] 输出:2
示例 2:

输入:isConnected = [[1,0,0],[0,1,0],[0,0,1]] 输出:3
提示:
1 <= n <= 200
n == isConnected.length
n == isConnected[i].length
isConnected[i][j]
为1
或0
isConnected[i][i] == 1
isConnected[i][j] == isConnected[j][i]