diff --git a/752. Open the Lock b/752. Open the Lock new file mode 100644 index 0000000..00f875d --- /dev/null +++ b/752. Open the Lock @@ -0,0 +1,40 @@ +class Solution +{ +public: + int openLock(vector& deadends, string target) + { + int operations = 0; + unordered_set dead, vis; + + for(auto &deadend : deadends) dead.insert(deadend); + if(dead.count("0000")) return -1; + + queue q; + q.push("0000"); + vis.insert("0000"); + + while(q.size()) + { + int sz = q.size(); + while(sz--) + { + string cur_state = q.front();q.pop(); + if(cur_state == target) return operations; + for(int i = 0; i < 4; i++) + { + string new_state = cur_state; + new_state[i] == '9' ? new_state[i] = '0' : new_state[i]++; + if(!vis.count(new_state) and !dead.count(new_state)) + q.push(new_state), vis.insert(new_state); + + new_state = cur_state; + new_state[i] == '0' ? new_state[i] = '9' : new_state[i]--; + if(!vis.count(new_state) and !dead.count(new_state)) + q.push(new_state), vis.insert(new_state); + } + } + operations++; + } + return -1; + } +};