【LeetCode】1496. 判斷路徑是否相交(Java)

angenin十一發表於2020-10-04

給你一個字串 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拼接影響效率,最後還是用官方的題解來做。

相關文章