给你一个字符串 path,其中 path[i] 的值可以是 ‘N’、‘S’、‘E’ 或者 ‘W’,分别表示向北、向南、向东、向西移动一个单位。
机器人从二维平面上的原点 (0, 0) 处开始出发,按 path 所指示的路径行走。
如果路径在任何位置上出现相交的情况,也就是走到之前已经走过的位置,请返回 True ;否则,返回 False 。
class Solution {
public boolean isPathCrossing(String path) {
Set<Integer> set = new HashSet<>();
int x = 0;
int y = 0;
//1 <= path.length <= 10^4,路线最长为10000,所以这里x就只乘10000
set.add(x * 10000 + y);
for (int i = 0; i < path.length(); i++) {
switch (path.charAt(i)) {
case 'N': y++; break;
case 'S': y--; break;
case 'W': x++; break;
case 'E': x--; break;
}
if (set.contains(x * 10000 + y)) return true;
set.add(x * 10000 + y);
}
return false;
}
}
没什么思路,看了官方发布的题解,使用自定义hash,然后保存到set中,有了思路做起来就容易多了,评论区下有人说用String也可以,本来想用String来试试的,不过考虑到String拼接影响效率,最后还是用官方的题解来做。