1 Star 0 Fork 0

chintensakai/leetcode-golang

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
code752.go 1.13 KB
一键复制 编辑 原始数据 按行查看 历史
chintensakai 提交于 2023-10-14 00:24 . 1013 - 完结:go专业级已过
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
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/chintensakai/leetcode-golang.git
git@gitee.com:chintensakai/leetcode-golang.git
chintensakai
leetcode-golang
leetcode-golang
main

搜索帮助