news 2026/7/25 16:19:59

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/7/21 15:04:50

电商网站商品筛选栏的sticky定位实战

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个电商商品列表页的筛选栏sticky实现方案。页面顶部有网站导航(高度80px)&#xff0c;下方是筛选栏(高度50px)&#xff0c;再往下是商品列表。要求&#xff1a;1. 滚动时筛选…

作者头像 李华
网站建设 2026/7/25 12:07:04

零基础学结构体:从概念到实战5个例子

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 设计一个适合初学者的结构体教学示例集合&#xff0c;包含5个逐步复杂的案例&#xff1a;1. 二维点坐标 2. 图书信息管理 3. 简单银行账户 4. 游戏角色属性 5. 学生成绩统计。每个案…

作者头像 李华
网站建设 2026/7/24 6:44:27

5分钟搭建status_invalid_image_hash检测原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 构建一个极简图像哈希验证原型&#xff0c;功能&#xff1a;1) 文件选择器上传单张图片 2) 计算并显示哈希值 3) 简单匹配验证 4) 显示验证结果。使用纯前端技术HTML/JS实现&#x…

作者头像 李华
网站建设 2026/7/25 7:17:19

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

在现代交通系统中&#xff0c;车牌识别已成为人工智能最成功、最普及的应用之一。我们在小区出入口看到的自动门禁、高速公路违章抓拍系统&#xff0c;以及智慧城市的交通治理平台&#xff0c;都离不开车牌识别技术的支持。车牌识别&#xff08;License Plate Recognition, LPR…

作者头像 李华
网站建设 2026/7/24 20:19:05

5分钟搞定node-sass配置:快速原型开发指南

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个快速验证node-sass配置的原型项目模板&#xff0c;包含预配置好的manifest.json文件和简单测试用例。要求支持一键运行验证&#xff0c;提供多种配置方案比较&#xff0c;使…

作者头像 李华
网站建设 2026/7/24 3:20:50

幽冥大陆(四十九)PHP打造Java的Jar实践——东方仙盟筑基期

在 Java 生态中&#xff0c;Jar 包是代码分发、部署的核心载体&#xff0c;它将编译后的 class 文件、资源文件等打包成一个独立的归档文件&#xff0c;实现了代码的便携性与复用性。而在 PHP 领域&#xff0c;传统的部署方式多是直接暴露源码&#xff0c;这不仅在安全、分发层…

作者头像 李华