---
tags: leetcode
---
# [752. Open the Lock](https://leetcode.com/problems/open-the-lock/)
---
# My Solution
## The Key Idea for Solving This Coding Question
## C++ Code
```cpp=
class Solution {
public:
int openLock(vector<string> &deadends, string target) {
unordered_set<string> deadendSet(deadends.begin(), deadends.end());
if (deadendSet.find("0000") != deadendSet.end()) {
return -1;
}
unordered_set<string> visited;
queue<string> q;
int minTurns = 0;
q.push("0000");
visited.insert("0000");
while (!q.empty()) {
int qLen = q.size();
for (int i = 0; i < qLen; ++i) {
string guess = q.front();
q.pop();
if (guess == target) {
return minTurns;
}
for (int j = 0; j < guess.size(); ++j) {
string up = turnUp(guess, j);
if (deadendSet.find(up) == deadendSet.end() &&
visited.find(up) == visited.end()) {
q.push(up);
visited.insert(up);
}
string down = turnDown(guess, j);
if (deadendSet.find(down) == deadendSet.end() &&
visited.find(down) == visited.end()) {
q.push(down);
visited.insert(down);
}
}
}
++minTurns;
}
return -1;
}
private:
string turnUp(string guess, int j) {
if (guess[j] == '9') {
guess[j] = '0';
} else {
++guess[j];
}
return guess;
}
string turnDown(string guess, int j) {
if (guess[j] == '0') {
guess[j] = '9';
} else {
--guess[j];
}
return guess;
}
};
```
## Time Complexity
## Space Complexity
# Miscellane
<!--
# Test Cases
```
["0201","0101","0102","1212","2002"]
"0202"
```
```
["8888"]
"0009"
```
```
["8887","8889","8878","8898","8788","8988","7888","9888"]
"8888"
```
* Wrong Answer
```
["0000"]
"8888"
```
-->