Leetcode 753 Solution
This article provides solution to leetcode question 753 (open-the-lock)
Access this page by simply typing in "lcs 753" in your browser address bar if you have bunnylol configured.
Leetcode Question Link
https://leetcode.com/problems/open-the-lock
Solution
class Solution:
def openLock(self, deadends: List[str], target: str) -> int:
deadends_set = {
(int(deadend[0]), int(deadend[1]), int(deadend[2]), int(deadend[3]))
for deadend in deadends
}
target_lock = (int(target[0]), int(target[1]), int(target[2]), int(target[3]))
if (0, 0, 0, 0) in deadends_set:
return -1
q = collections.deque()
q.append((0, 0, 0, 0))
seen = {(0, 0, 0, 0)}
step = 0
while q:
s = len(q)
for _ in range(s):
lock = q.popleft()
if lock == target_lock:
return step
for i in range(4):
for delta in [-1, 1]:
next_lock = (
(lock[0] + delta) % 10 if i == 0 else lock[0],
(lock[1] + delta) % 10 if i == 1 else lock[1],
(lock[2] + delta) % 10 if i == 2 else lock[2],
(lock[3] + delta) % 10 if i == 3 else lock[3],
)
if next_lock not in deadends_set and next_lock not in seen:
q.append(next_lock)
seen.add(next_lock)
step += 1
return -1