代码拉取完成,页面将自动刷新
package main
// 打开密码锁
func openLock(deadends []string, target string) int {
deadSet := make(map[string]bool)
for _, deadend := range deadends {
deadSet[deadend] = true // 模拟set,即使有重复的,也还是true,相当于set的效果
}
q := make([]string, 0)
visited := make(map[string]bool)
q = append(q, "0000")
visited["0000"] = true
ans := 0
for len(q) > 0 {
size := len(q)
for i := 0; i < size; i++ {
poll := q[0]
q = q[1:]
if poll == target {
return ans
}
if _, ok := deadSet[poll]; ok {
continue
}
for j := 0; j < len(poll); j++ { // 对每个字符,尝试0-9替换
next := []byte(poll)
if poll[j] == '0' { // 往小了转
next[j] = '9'
} else {
next[j] = poll[j] - 1
}
nextStr := string(next)
if _, ok := visited[nextStr]; !ok {
visited[nextStr] = true
q = append(q, nextStr)
}
if poll[j] == '9' {
next[j] = '0'
} else {
next[j] = poll[j] + 1
}
nextStr = string(next)
if _, ok := visited[nextStr]; !ok {
visited[nextStr] = true
q = append(q, nextStr)
}
}
}
ans++
}
return -1
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。