「每日LeetCode」2021年2月28日

本文最后更新于:2023年3月19日 晚上

Lt1496. 判断路径是否相交

1496. 判断路径是否相交

给你一个字符串 path,其中 path[i] 的值可以是 'N''S''E' 或者 'W',分别表示向北、向南、向东、向西移动一个单位。
机器人从二维平面上的原点 (0, 0) 处开始出发,按 path 所指示的路径行走。
如果路径在任何位置上出现相交的情况,也就是走到之前已经走过的位置,请返回 True ;否则,返回 False
示例 1:

1
2
3
输入:path = "NES"
输出:false
解释:该路径没有在任何位置相交。

示例 2:

1
2
3
输入:path = "NESWW"
输出:true
解释:该路径经过原点两次。

提示:

  • 1 <= path.length <= 10^4
  • path 仅由 {'N', 'S', 'E', 'W} 中的字符组成

思路

使用 set 记录已走过的坐标格式化后的字符串,如果 set 中有则返回 true。

解答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/**
* @param {string} path
* @return {boolean}
*/
var isPathCrossing = function (path) {
const posSet = new Set(["(0,0)"]);
let horizontal = 0,
vertical = 0;
for (const arr of path) {
switch (arr) {
case "N": {
vertical++;
break;
}
case "S": {
vertical--;
break;
}
case "E": {
horizontal++;
break;
}
case "W": {
horizontal--;
break;
}
}
const posStr = `(${horizontal},${vertical})`;
if (posSet.has(posStr)) return true;
else posSet.add(posStr);
}
return false;
};