BFS over combinations
Time O(10⁴ × 8) Space O(10⁴)Level-order BFS from "0000". For each state, turn each wheel +1 and −1 (as +9 mod 10). Skip seen states.
import java.util.*;
class Solution {
public int openLock(String[] deadends, String target) {
Set<String> seen = new HashSet<>(Arrays.asList(deadends));
if (seen.contains("0000")) return -1;
Deque<String> q = new ArrayDeque<>();
q.offer("0000");
seen.add("0000");
for (int steps = 0; !q.isEmpty(); steps++) {
for (int size = q.size(); size > 0; size--) {
String s = q.poll();
if (s.equals(target)) return steps;
char[] c = s.toCharArray();
for (int i = 0; i < 4; i++) {
char orig = c[i];
for (int d : new int[]{1, 9}) {
c[i] = (char) ('0' + (orig - '0' + d) % 10);
String t = new String(c);
if (seen.add(t)) q.offer(t);
}
c[i] = orig;
}
}
}
return -1;
}
}Verdict: The state space is small.