zoukankan      html  css  js  c++  java
  • 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;
        }
    

    你的鼓励也是我创作的动力

    打赏地址

  • 相关阅读:
    模拟tap事件和longTap事件
    jquery工具方法总结
    outline:0与outline:none区别
    babel吐槽
    兼容ie8 rgba()写法
    git删除文件夹
    css简写总结
    回调函数实例—(二)
    回调函数的那些事儿(转载)
    回调函数好文章汇总
  • 原文地址:https://www.cnblogs.com/yangsanchao/p/13331458.html
Copyright © 2011-2022 走看看