bfs,将存在队列中密码的每一位进行操作,直到队列为空或达到目标值,初始时队列和记录已存在的密码集合均为 "0000"

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param vec string字符串一维数组 
# @param tar string字符串 
# @return int整型
#
class Solution:
    def open(self , vec: List[str], tar: str) -> int:
        # write code here
        queue = ["0000"]
        visited = set("0000")
        res = 0
        while queue:
            nxt = []
            for q in queue:
                if q == tar:
                    return res
                if q in vec:
                    continue
                for i in range(4):
                    t = int(q[i])
                    if t == 9:
                        t = 0
                    else:
                        t += 1
                    s = q[:i] + str(t) + q[i + 1:]
                    if s not in vec and s not in visited:
                        visited.add(s)
                        nxt.append(s)
                    t = int(q[i])
                    if t == 0:
                        t = 9
                    else:
                        t -= 1
                    s = q[:i] + str(t) + q[i + 1:]
                    if s not in vec and s not in visited:
                        visited.add(s)
                        nxt.append(s)
            queue = nxt
            res += 1
        return -1