算法笔记:判断机器人在二位平面上行走的路径是否相交

算法笔记 专栏收录该内容
2 篇文章 0 订阅

题目

给你一个字符串 path,其中 path[i] 的值可以是 ‘N’、‘S’、‘E’ 或者 ‘W’,分别表示向北、向南、向东、向西移动一个单位。

机器人从二维平面上的原点 (0, 0) 处开始出发,按 path 所指示的路径行走。

如果路径在任何位置上出现相交的情况,也就是走到之前已经走过的位置,请返回 True ;否则,返回 False 。
题目链接:力扣:判断路径是否相交
示例 :在这里插入图片描述

输入:path = “NES”
输出:false
解释:该路径没有在任何位置相交

思路

根据题目去重,可以使用set()集合去重
①初始化集合与变量x,y
②在一个for循环里,根据字符判断x,y变化
③每次循环,尝试将变化后的x,y添加进set集合,若不成功,则表示已经出现过该(x,y)的坐标,路径相交

java代码:

class Solution {
   public boolean isPathCrossing(String path) {
            Set<String> set = new HashSet<>();
            int x = 0,y=0;
            set.add("0,0");
            for(int i=0;i<path.length();i++){
                switch(path.charAt(i)){
                    case 'N':y++;break;
                    case 'S':y--;break;
                    case 'E':x++;break;
                    case 'W':x--;break;
                    default : break;}
            	if(!set.add(x+ ","+ y)){
                return true;
            }
        }         
            return false;
       }
    }

Python代码:

class Solution:
    def isPathCrossing(self, path: str) -> bool:
        s = set()
        x = 0
        y = 0
        s.add(tuple([0,0]))
        for i in range(len(path)):
            if path[i] == 'N':
                y+=1
            elif path[i] == 'S':
                y-=1
            elif path[i] == 'E':
                x+=1
            elif path[i] == 'W':
                x-=1
            else:
                pass
            if tuple([x,y]) in s:
                return True;
            else:
                s.add(tuple([x,y]))
        return False
  • 47
    点赞
  • 50
    评论
  • 8
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值