算法思想:
BFS一般都是用队列来实现的,注意可以用哈希表来加快查询某元素在不在数组中的速度。
python
class Solution:
def pullup(self, arr, j):
ls = list(arr)
if ls[j] == '9':
ls[j] = '0'
else:
ls[j] = str(int(ls[j]) + 1)
return ''.join(ls)
def pulldown(self, arr, j):
ls = list(arr)
if ls[j] == '0':
ls[j] = '9'
else:
ls[j] = str(int(ls[j]) - 1)
return ''.join(ls)
def openLock(self, deadends: List[str], target: str):
deads = {data: index for index, data in enumerate(deadends)}
step = 0
q = ['0000']
visited = set('0000')
while q:
n = len(q)
for i in range(n):
tmp = q.pop(0)
if deads.get(tmp, -1) != -1:
continue
if tmp == target:
return step
for j in range(4):
a = self.pullup(tmp, j)
b = self.pulldown(tmp, j)
if a not in visited:
q.append(a)
visited.add(a)
if b not in visited:
q.append(b)
visited.add(b)
step += 1
return -1