标签:node ok string num 入列 打开 节点 转盘
https://leetcode.cn/problems/open-the-lock/solution/shou-hua-tu-jie-tu-bfs-lin-jie-guan-xi-7-ud8c/
func openLock(deadends []string, target string) int { step := 0 // 旋转次数 deadendsMap := make(map[string]bool) visitedMap := make(map[string]bool) for _, v := range deadends { // 记录所有“死亡点” deadendsMap[v] = true } q := []string{"0000"} // 队列q for len(q) > 0 { // 循环直至队列为空 size := len(q) // 获取BFS当前level的节点个数 for i := 0; i < size; i++ { // 遍历当前层的节点 node := q[0] // 获取出列的节点 q = q[1:] // 节点出列 if node == target { // 如果出列的节点正好是目标节点 return step // 返回当前所用的步数 } if _, ok := visitedMap[node]; ok { // 之前访问过该节点,跳过 continue } if _, ok := deadendsMap[node]; ok { // 遇到“死亡点”,跳过 continue } visitedMap[node] = true // 将该点标记为访问过 for j := 0; j < len(node); j++ { // 通过遍历当前字符串,找出它的所有子节点,安排入列 num := int(node[j] - '0') // 获取当前的数字num up := (num + 1) % 10 // 往上拧所得的新数,比如1变成2 down := (num + 9) % 10 // 往下拧所得的新数,比如7变成6 q = append(q, node[:j]+strconv.Itoa(up)+node[j+1:]) // 拼成新字符串,入列 q = append(q, node[:j]+strconv.Itoa(down)+node[j+1:]) // 拼成新字符串 入列 } } step++ // 当前层的所有节点遍历完毕,层次+1 } return -1 // 无论如何都遇不到目标节点,返回-1 }
标签:node,ok,string,num,入列,打开,节点,转盘 来源: https://www.cnblogs.com/-citywall123/p/16466352.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。