• 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;
        }
    

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

    打赏地址

  • 相关阅读:
    重启进程
    linux如何查看端口被哪个进程占用?
    Web服务器磁盘满深入解析及解决
    基于Nginx实现访问控制、连接限制
    Tomcat线程模型分析及源码解读
    linux防火墙使用以及配置
    MySQL死锁及解决方案
    tcpdump 命令
    netperf 网络性能测试
    netstat 命令详解
  • 原文地址:https://www.cnblogs.com/yangsanchao/p/13331458.html
Copyright © 2020-2023  润新知