LeetCode752-打开轮盘锁
BFS
unordered_set: insert find begin end
queue : push pop front last
class Solution {
public:
string plusone(string str,int i){
if(str[i]=='9'){
str[i]='0';
}
else{
str[i]=str[i]+1;
}
return str;
}
string downone(string str,int i){
if(str[i]=='0'){
str[i]='9';
}
else{
str[i]=str[i]-1;
}
return str;
}
int openLock(vector<string>& deadends, string target) {
unordered_set<string> deadset(deadends.begin(),deadends.end());
queue<string> q;
q.push("0000");
unordered_set<string> visited;
visited.insert("0000");
int step=0;
while(!q.empty()){
int size=q.size();
for(int i=0;i<size;i++){
string str=q.front();
q.pop();
if(deadset.find(str)!=deadset.end()){
continue;
}
if(str==target){
return step;
}
for(int j=0;j<4;j++){
string up=plusone(str,j);
if(!visited.count(up)){
q.push(up);
visited.insert(up);
}
string down=downone(str,j);
if(!visited.count(down)){
q.push(down);
visited.insert(down);
}
}
}
step++;
}
return -1;
}
};
/*
http://www.cplusplus.com/reference/unordered_set/unordered_set/
*/

浙公网安备 33010602011771号