leetcode-1496. 判断路径是否相交
- Posted by 微博@Yangsc_o
- 原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0
本题是leetcode,地址:1496. 判断路径是否相交
题目
给你一个字符串 path,其中 path[i] 的值可以是 'N'、'S'、'E' 或者 'W',分别表示向北、向南、向东、向西移动一个单位。
机器人从二维平面上的原点 (0, 0) 处开始出发,按 path 所指示的路径行走。
如果路径在任何位置上出现相交的情况,也就是走到之前已经走过的位置,请返回 True ;否则,返回 False 。
示例 1:
![]()
输入:path = "NES"
输出:false
解释:该路径没有在任何位置相交。
示例 2:![]()
输入:path = "NESWW"
输出:true
解释:该路径经过原点两次。提示:
1 <= path.length <= 10^4
path 仅由 {'N', 'S', 'E', 'W} 中的字符组成
分析
如果我们把初始位置设置为int x = 0, y = 0;那么每次往{'N', 'S', 'E', 'W} 走时,对值做加 减操作,同时记录走过的位置坐标,如果下一步已经是我们记录过的位置,那么返回ture、否则返回false;我们需要考虑的是怎么把x,y映射为一个值,我们可以考虑自己写一个hash算法,1 <= path.length <= 10^4的限制,代码如下;
code
public int hash(int x ,int y){
return x * 100001 + y;
}
public boolean isPathCrossing(String path) {
Set<Integer> set = new HashSet<>();
int x = 0 , y = 0;
set.add(hash(x,y));
for(int index = 0; index < path.length(); index ++) {
char c = path.charAt(index);
switch(c) {
case 'N': y ++; break;
case 'S': y --; break;
case 'W': x ++; break;
case 'E': x --; break;
}
if(!set.add(hash(x,y))) {
return true;
}
}
return false;
}
你的鼓励也是我创作的动力
微博:https://weibo.com/yangsanchao