news 2026/4/15 21:45:30

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/4/12 23:24:31

批处理 vs Python:哪种自动化方式更高效?

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个对比演示工具&#xff0c;左侧输入批处理命令&#xff0c;右侧显示等效的Python代码。支持常见操作对比&#xff1a;文件处理、注册表操作、系统管理等。提供执行耗时统计功…

作者头像 李华
网站建设 2026/4/16 9:01:25

20、文件归档、同步与正则表达式基础

文件归档、同步与正则表达式基础 1. 文件压缩与归档 1.1 tar 命令的压缩与网络传输 在文件处理中, tar 是一个常用的工具,现代版本的 GNU tar 支持直接使用 z 和 j 选项进行 gzip 和 bzip2 压缩。例如,使用之前的例子,我们可以简化操作: [me@linuxbox ~]…

作者头像 李华
网站建设 2026/4/15 21:05:17

新型内置式永磁同步电机设计 随着能源问题的日益突出,环境污染越来越严重,全社会都在提倡绿色环保...

新型内置式永磁同步电机设计 随着能源问题的日益突出&#xff0c;环境污染越来越严重&#xff0c;全社会都在提倡绿色环保清洁能源&#xff0c;汽车行业也在朝着节能和环保的理念发展&#xff0c;特别是纯电动汽车作为最清洁的能源汽车是我国新能源汽车发展的主要方向。 驱动电…

作者头像 李华
网站建设 2026/4/12 20:16:17

Flutter 跨平台开发实战:从零构建电商应用 UI

✨ 本文配套实战项目地址&#xff1a; https://openharmonycrossplatform.csdn.net/content 本文将带你深入探索 Flutter 的强大之处&#xff0c;通过完整的电商应用 UI 实例&#xff0c;掌握现代跨平台应用开发的核心技能 一、Flutter 简介与优势 1.1 什么是 Flutter&#xf…

作者头像 李华
网站建设 2026/4/16 8:42:05

回溯算法--组合总和II

问题要求&#xff1a;给定一个候选数集 (candidates) 和一个目标数 (target)&#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 关键约束&#xff1a;1. candidates 中的每个数字在每个组合中只能使用一次。2. 解集不能包含重复的组合。一句话就是&#xff1a…

作者头像 李华