1class Solution:2def openLock(self, deadends: List[str], target: str) -> int:3def neighbor(s):4res = []5for i, c in enumerate(s):6res.append(7s[:i] + chr((ord(c) - ord("0") + 9) % 10 + ord("0")) + s[i + 1 :]8)9res.append(10s[:i] + chr((ord(c) - ord("0") + 1) % 10 + ord("0")) + s[i + 1 :]11)12return res1314deadends = set(deadends)15if "0000" in deadends:16return -117ans = 018queue = deque(["0000"])19vis = set()20while queue:21l = len(queue)22for _ in range(l):23cur = queue.popleft()24if cur == target:25return ans26for nxt in neighbor(cur):27if nxt not in vis and nxt not in deadends:28queue.append(nxt)29vis.add(nxt)30ans += 131return -1