【每日一题】力扣 1496题 判断路径是否相交

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

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

如果路径在任何位置上出现相交的情况,也就是走到之前已经走过的位置,请返回 True ;否则,返回 False 。

示例 1: 

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

示例 2:
  输入:path = "NESWW"
  输出:true
  解释:该路径经过原点两次。

思路 :
用c++容器里面的map特性不重复来写,头文件是#include<map>。
map是STL的一个关联容器,它以<key,value>一对一的形式存储,且map的内部自建一个红黑树,使得其可以自动排序。
有三种方法对其进行遍历,1前向迭代器 2 反向迭代器 3 数组的形式。
代码后附带STL表。
代码:
class Solution {
public:
    bool isPathCrossing(string path) {  
     map<int,map<int,int>>div;
     int a = 0,b = 0;
     div[a][b] = 1;
     for(int i = 0;i < path.length();i++) {
         if(path[i] == 'N'){
             a++;
         }
         if(path[i] == 'S'){
             a--;
         }
         if(path[i] == 'E'){
             b++;
         }
           if(path[i] == 'W'){
             b--;
         }
         if(div[a][b]){
             return true;
         }
             div[a][b] = 1;
     }
     return false;
    }
};

 

  

 

-------------------------------------------

个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!

如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

posted @ 2020-08-06 15:30  比尔的歌  阅读(197)  评论(0)    收藏  举报