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. The lock initially starts at '0000', a string representing the state of the 4 wheels.

You are given a list of deadends, 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.

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.

Input & Output

Example 1 — Basic Case
$ Input: deadends = ["0201","0101","0102","1212","2002"], target = "0202"
Output: 6
💡 Note: One shortest path: 0000 → 1000 → 1100 → 1200 → 1201 → 1202 → 0202. Each step turns one wheel by one position, avoiding all deadends.
Example 2 — Blocked Start
$ Input: deadends = ["8888"], target = "0009"
Output: 1
💡 Note: Simple case: 0000 → 0009 (turn the last wheel once from 0 to 9). The deadend 8888 doesn't affect this path.
Example 3 — Impossible Case
$ Input: deadends = ["8887","8889","8878","8898","8788","8988","7888","9888"], target = "8888"
Output: -1
💡 Note: All neighbors of target 8888 are deadends, making it unreachable from 0000.

Constraints

  • 1 ≤ deadends.length ≤ 500
  • deadends[i].length == 4
  • target.length == 4
  • target will not be in the list deadends
  • target and deadends[i] consist of digits only

Visualization

Tap to expand
Open the Lock - BFS Approach INPUT 0 0 0 0 Start: "0000" Target: "0202" Deadends: 0201 0101 0102 1212 2002 Each wheel: 0-9 Wraps: 9 -- 0 0 1 2 9 1 move = 1 slot turn ALGORITHM STEPS 1 Initialize BFS Queue: ["0000"], visited set 2 Generate neighbors 8 neighbors per state 3 Skip deadends Check before adding 4 Count levels Each level = 1 move BFS Path: 0000 1000 0100 ... ... 0000 --1-- 0100 --2-- 0200 --3-- 0201 X --detour-- 0202 FINAL RESULT 0 2 0 2 UNLOCKED! Output: 6 Minimum moves to unlock Optimal Path: 0000 (start) 0001 (move 1) 0002 (move 2) 0102 X avoid ... detour ... 0202 (move 6) OK Key Insight: BFS guarantees shortest path in unweighted graphs. Each lock state is a node, and each single wheel turn is an edge. Deadends are blocked nodes. BFS explores all states at distance k before distance k+1, so the first time we reach target is the minimum number of moves. TutorialsPoint - Open the Lock | BFS Approach
Asked in
Amazon 15 Google 12 Microsoft 8 Facebook 6
48.0K Views
Medium Frequency
~25 min Avg. Time
1.8K Likes
Ln 1, Col 1
Smart Actions
💡 Explanation
AI Ready
💡 Suggestion Tab to accept Esc to dismiss
// Output will appear here after running code
Code Editor Closed
Click the red button to reopen