leetcode-1496. 判斷路徑是否相交



本題是leetcode,地址:1496. 判斷路徑是否相交

題目

給你一個字符串 path,其中 path[i] 的值可以是 'N'、'S'、'E' 或者 'W',分別表示向北、向南、向東、向西移動一個單位。

機器人從二維平面上的原點 (0, 0) 處開始出發,按 path 所指示的路徑行走。

如果路徑在任何位置上出現相交的情況,也就是走到之前已經走過的位置,請返回 True ;否則,返回 False 。

示例 1:

img

輸入:path = "NES"
輸出:false
解釋:該路徑沒有在任何位置相交。
示例 2:

img

輸入: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;
    }

你的鼓勵也是我創作的動力

打賞地址


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM