news 2026/5/3 0:02:08

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/5/1 7:31:33

Phyfusion:AI如何革新物理模拟开发流程

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 使用Phyfusion创建一个基于AI的物理模拟开发环境&#xff0c;支持流体动力学和刚体模拟。要求&#xff1a;1. 集成AI模型自动生成物理引擎核心代码&#xff1b;2. 提供实时可视化调…

作者头像 李华
网站建设 2026/5/2 20:00:43

毕设项目 大数据电影数据分析与可视化系统

文章目录 0 简介1 课题背景2 效果实现3 爬虫及实现4 Flask框架5 Ajax技术6 Echarts7 最后 0 简介 今天学长向大家介绍一个机器视觉的毕设项目 &#x1f6a9;基于大数据的电影数据分析与可视化系统 项目运行效果(视频)&#xff1a; 毕业设计 大数据电影评论情感分析&#x1f…

作者头像 李华
网站建设 2026/5/1 3:51:04

贾子战略理论体系(一套兵法、两个七十二、三大定律)的全面研究:从传统智慧到现代应用的理论重构与实践验证

贾子战略理论体系&#xff08;一套兵法、两个七十二、三大定律&#xff09;的全面研究&#xff1a;从传统智慧到现代应用的理论重构与实践验证引言在全球战略格局深度调整、人工智能技术日新月异的 2025 年&#xff0c;传统战略理论面临着前所未有的挑战与机遇。贾子战略理论体…

作者头像 李华
网站建设 2026/5/1 3:49:21

23、Linux文本处理工具全解析

Linux文本处理工具全解析 在Linux系统中,文本处理是一项非常重要的工作。无论是日常的系统管理,还是软件开发过程中的代码处理,都离不开各种文本处理工具。本文将详细介绍一些常用的Linux文本处理工具及其使用方法。 排序与去重 在处理文本文件时,排序和去重是常见的操作…

作者头像 李华
网站建设 2026/5/2 12:47:15

YouTube开放稳定币收款,加密货币支付正在全球普及?

2025年底&#xff0c;一则看似简单的支付功能更新&#xff0c;却引起了全球科技与金融圈的热烈讨论。全球最大的影音平台YouTube宣布&#xff0c;将允许美国地区的内容创作者选择使用PayPal发行的美元稳定币PYUSD来领取他们的收益。这不仅仅是为创作者提供一个新的收款选项&…

作者头像 李华
网站建设 2026/5/3 2:30:58

显卡卸载工具DDU

链接&#xff1a;https://pan.quark.cn/s/b675ab53fa00显卡卸载工具DDU是款可用于显卡驱动卸载的程序工具&#xff0c;这个驱动卸载工具支持卸载NVIDIA, AMD, Intel品牌的显卡驱动&#xff0c;也就是说绝大部分电脑都可以使用它彻底卸载显卡驱动。功能特点可用于显卡驱动程序的…

作者头像 李华