题目:​​原题链接​​(中等)

标签:广度优先搜索

解法

时间复杂度

空间复杂度

执行用时

Ans 1 (Python)

O ( 10000 ) O(10000) O(10000)

O ( 10000 ) O(10000) O(10000)

568ms (76.79%)

Ans 2 (Python)

Ans 3 (Python)

解法一:

class Solution:
def openLock(self, dead_ends: List[str], target: str) -> int:
def neighbors(ss):
res = []
for ii in range(4):
res.append(ss[:ii] + str((int(ss[ii]) - 1) % 10) + ss[ii + 1:])
res.append(ss[:ii] + str((int(ss[ii]) + 1) % 10) + ss[ii + 1:])
return res

dead_ends = set(dead_ends)
if "0000" in dead_ends or target in dead_ends:
return -1
if target == "0000":
return 0

visited = dead_ends | {target}
queue = collections.deque([target])
step = 0
while queue:
step += 1
for _ in range(len(queue)):
s1 = queue.popleft()
for s2 in neighbors(s1):
if s2 == "0000":
return step
if s2 not in visited:
visited.add(s2)
queue.append(s2)

return -1