我正在解决LeetCode问题“路径交叉”,其中我使用
set<pair<int,int>>
,试图找出点x,y
是否已经在路径中。但我没有得到想要的结果。
这是代码:
bool isPathCrossing(string s) {
set <pair <int, int>> st;
int x = 0, y = 0;
st.insert(make_pair(x,y));
for(int i = 0; i < s.size(); i++) {
if(s[i] == 'N') y++;
else if(s[i] == 'W') x++;
else if(s[i] == 'S') y--;
else x--;
pair <int, int> pr = make_pair(x, y);
if(st.find(pr) != st.end()) return false;
st.insert(pr);
}
return true;
}
find()
方法仅适用于pair
的第一个元素,还是同时适用于两个元素?
为了回答您的问题,
find()
将比较 pair
的两个元素。
您没有得到想要的结果,因为您没有遵循 LeetCode 给您的说明。
您的
return
值是倒退的。如果循环运行找到现有点,则需要返回 true
,否则如果循环退出,则返回 false
。
您的
x
坐标的移动是向后的。西向左移动,东向右移动,因此您需要在 x
上减少'W'
,在
x
上增加 'E'
。