news 2026/1/19 0:52:35

leetcode 752. Open the Lock 打开转盘锁

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
leetcode 752. Open the Lock 打开转盘锁

Problem: 752. Open the Lock 打开转盘锁

解题过程

队列,两种可能的,某个字符+1取模或者-1+10取模,共4个字符,所以共4*2种可能,而且0000到9999共10000种可能,所以集合不大的,可以用广度优先搜索,然后判断是否已经遍历过,若是没有则放入队列,队列每次pop一个就将这个字符串放入已经遍历过的集合中,防止重复的

Code

class Solution { public: int openLock(vector<string>& deadends, string target) { if(target=="0000") return 0; queue<pair<string, int>> qe; qe.push({"0000", 0}); unordered_set<string> dead; for(string& s : deadends) { dead.insert(s); } if(dead.find("0000")!=dead.end()) return -1; pair<string, int> pr; string str, tmp; char a,b,c,d; int a1, b1,c1,d1, len; while(!qe.empty()) { int sz = qe.size(); for(int i = 0; i < sz; i++) { pr = qe.front(); str = pr.first; len = pr.second; qe.pop(); dead.insert(str); a1 = str[0]-'0'; b1 = str[1]-'0'; c1 = str[2]-'0'; d1 = str[3]-'0'; a = (a1+1)%10 + '0'; tmp.clear(); tmp += a; tmp += str[1]; tmp += str[2]; tmp += str[3]; if(dead.find(tmp)==dead.end()) { if(tmp==target) return len + 1; dead.insert(tmp); qe.push({tmp, len + 1}); } a = (a1-1+10)%10 + '0'; tmp.clear(); tmp += a; tmp += str[1]; tmp += str[2]; tmp += str[3]; if(dead.find(tmp)==dead.end()) { if(tmp==target) return len + 1; dead.insert(tmp); qe.push({tmp, len + 1}); } b = (b1+1)%10 + '0'; tmp.clear(); tmp += str[0]; tmp += b; tmp += str[2]; tmp += str[3]; if(dead.find(tmp)==dead.end()) { if(tmp==target) return len + 1; dead.insert(tmp); qe.push({tmp, len + 1}); } b = (b1-1+10)%10 + '0'; tmp.clear(); tmp += str[0]; tmp += b; tmp += str[2]; tmp += str[3]; if(dead.find(tmp)==dead.end()) { if(tmp==target) return len + 1; dead.insert(tmp); qe.push({tmp, len + 1}); } c = (c1+1)%10 + '0'; tmp.clear(); tmp += str[0]; tmp += str[1]; tmp += c; tmp += str[3]; if(dead.find(tmp)==dead.end()) { if(tmp==target) return len + 1; dead.insert(tmp); qe.push({tmp, len + 1}); } c = (c1-1+10)%10 + '0'; tmp.clear(); tmp += str[0]; tmp += str[1]; tmp += c; tmp += str[3]; if(dead.find(tmp)==dead.end()) { if(tmp==target) return len + 1; dead.insert(tmp); qe.push({tmp, len + 1}); } d = (d1+1)%10 + '0'; tmp.clear(); tmp += str[0]; tmp += str[1]; tmp += str[2]; tmp += d; if(dead.find(tmp)==dead.end()) { if(tmp==target) return len + 1; dead.insert(tmp); qe.push({tmp, len + 1}); } d = (d1-1+10)%10 + '0'; tmp.clear(); tmp += str[0]; tmp += str[1]; tmp += str[2]; tmp += d; if(dead.find(tmp)==dead.end()) { if(tmp==target) return len + 1; dead.insert(tmp); qe.push({tmp, len + 1}); } } } return -1; } };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/18 17:37:50

人工智能应用-机器视觉:车牌识别(2)

一、车牌识别的难点车牌是一种高度结构化的图像&#xff1a;(1) 固定的长度或字符数量&#xff1b;(2) 统一的字体与版式&#xff1b;(3) 统一或可辨别的背景颜色标准。例如&#xff0c;中国车牌通常由一个汉字加字母数字的组合&#xff1a;“京 A12345”中&#xff0c;“京”代…

作者头像 李华
网站建设 2025/12/14 18:26:40

ComfyUI Manager:AI如何简化节点式工作流开发

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个基于ComfyUI Manager的AI辅助开发演示项目&#xff0c;展示如何利用AI自动生成节点工作流。项目应包含&#xff1a;1) 一个图像生成工作流示例&#xff0c;展示AI如何推荐最…

作者头像 李华
网站建设 2026/1/15 0:50:21

Linux小白必看:D-Bus连接权限错误完全指南

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个交互式学习模块&#xff0c;通过可视化方式展示D-Bus系统架构。包含:1) 拖拽式组件关系图 2) 权限流程图动画 3) 实时修改dbus-daemon配置的沙箱环境 4) 常见错误情景模拟器…

作者头像 李华
网站建设 2025/12/14 18:25:48

传统vsAI:解决status_invalid_image_hash效率对比

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个性能对比工具&#xff0c;功能&#xff1a;1) 传统方式手动检测图像哈希的模拟 2) AI自动检测的实现 3) 计时功能对比两者耗时 4) 生成可视化对比图表。使用Python的time模…

作者头像 李华
网站建设 2025/12/31 11:22:23

axios.create零基础入门:从疑惑到精通

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 请创建一个面向初学者的axios.create教学示例。要求&#xff1a;1. 用快递员送货的比喻解释axios.create的作用&#xff1b;2. 提供3个渐进式代码示例&#xff08;从最简单到完整配…

作者头像 李华
网站建设 2025/12/29 18:48:03

理解DMA双缓冲的原理和意义(CPU和DMA:并发并行和回调函数)

这篇文章弄懂了 &#xff0c; 对计算机硬件包括软件编程会上一个很大的台阶引子回调函数在函数调用时 &#xff0c; 是并行计算吗&#xff1f;计算单元这个系统里有很多个计算单元 &#xff0c; CPU 、 FPU 、 ADC 都是计算单元 &#xff0c; 计算单元的本质就是些门电路 &…

作者头像 李华