|
| 1 | +# Open the Lock |
| 2 | + |
| 3 | +You have a lock in front of you with 4 circular wheels. Each wheel has 10 slots: '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'. The wheels can rotate freely and wrap around: for example we can turn '9' to be '0', or '0' to be '9'. Each move consists of turning one wheel one slot. |
| 4 | + |
| 5 | +The lock initially starts at '0000', a string representing the state of the 4 wheels. |
| 6 | + |
| 7 | +You are given a list of deadends dead ends, meaning if the lock displays any of these codes, the wheels of the lock will stop turning and you will be unable to open it. |
| 8 | + |
| 9 | +Given a target representing the value of the wheels that will unlock the lock, return the minimum total number of turns required to open the lock, or -1 if it is impossible. |
| 10 | + |
| 11 | +## Example 1: |
| 12 | +```text |
| 13 | +Input: deadends = ["0201","0101","0102","1212","2002"], target = "0202" |
| 14 | +Output: 6 |
| 15 | +Explanation: |
| 16 | +A sequence of valid moves would be "0000" -> "1000" -> "1100" -> "1200" -> "1201" -> "1202" -> "0202". |
| 17 | +Note that a sequence like "0000" -> "0001" -> "0002" -> "0102" -> "0202" would be invalid, |
| 18 | +because the wheels of the lock become stuck after the display becomes the dead end "0102". |
| 19 | +``` |
| 20 | + |
| 21 | +## Example 2: |
| 22 | +```text |
| 23 | +Input: deadends = ["8888"], target = "0009" |
| 24 | +Output: 1 |
| 25 | +Explanation: |
| 26 | +We can turn the last wheel in reverse to move from "0000" -> "0009". |
| 27 | +``` |
| 28 | + |
| 29 | +## Example 3: |
| 30 | +```text |
| 31 | +Input: deadends = ["8887","8889","8878","8898","8788","8988","7888","9888"], target = "8888" |
| 32 | +Output: -1 |
| 33 | +Explanation: |
| 34 | +We can't reach the target without getting stuck. |
| 35 | +``` |
| 36 | + |
| 37 | +## Example 4: |
| 38 | +```text |
| 39 | +Input: deadends = ["0000"], target = "8888" |
| 40 | +Output: -1 |
| 41 | +``` |
| 42 | + |
| 43 | +## Note: |
| 44 | +- The length of deadends will be in the range [1, 500]. |
| 45 | +- target will not be in the list deadends. |
| 46 | +- Every string in deadends and the string target will be a string of 4 digits from the 10,000 possibilities '0000' to '9999'. |
0 commit comments