当前位置: 首页 > news >正文

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; } };
http://www.cnnetsun.cn/news/52401.html

相关文章:

  • 电商网站商品筛选栏的sticky定位实战
  • 零基础学结构体:从概念到实战5个例子
  • 5分钟搭建status_invalid_image_hash检测原型
  • 人工智能应用-机器视觉:车牌识别(1)
  • 5分钟搞定node-sass配置:快速原型开发指南
  • 幽冥大陆(四十九)PHP打造Java的Jar实践——东方仙盟筑基期
  • 从产线到质检,兰亭妙微教你做 “工人愿意用” 的工业 UI
  • 【数学】【微积分】 ① 导数的基础概念与计算法则
  • 咱们聊聊Spring循环依赖那点事儿:从“死锁”到“三级缓存”的奇妙之旅
  • Linux 文件拷贝性能对比:裸 `read/write` VS `fread/fwrite` —— 页面缓存与用户缓冲的真相(附完整测试代码)
  • 主散线指标 通达信源码
  • 提升开关频率(一) PRISEMI芯导科技MOSFET工艺结构的发展与演进
  • 音频录制和编辑软件
  • Quick CPU(CPU性能优化软件)
  • 数据分析 “手工匠” VS “智能魔方”!虎贲等考 AI:凭什么重塑论文写作新范式?
  • U-Net++:嵌套密集跳跃连接,多尺度融合增强特征表达,医学影像分割的unet创新-k学长深度学习专栏
  • 基于SpringBoot的在线拍卖系统(11480)
  • Flutter游戏开发与图形渲染实战
  • 【Java毕设源码分享】基于springboot+vue的电商个性化推荐系统设计与实现(程序+文档+代码讲解+一条龙定制)
  • 【Java毕设源码分享】基于springboot+vue的二手家电管理平台设计与实现(程序+文档+代码讲解+一条龙定制)
  • 【Java毕设源码分享】基于springboot+vue的二手商品网站设计与实现(程序+文档+代码讲解+一条龙定制)
  • 【Java毕设源码分享】基于springboot+vue的甘肃旅游管理系统设计与实现(程序+文档+代码讲解+一条龙定制)
  • 【Java毕设源码分享】基于springboot+vue的高校本科生学习成长记录系统的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 2003-2024年上市公司高管政治关联、政企纽带数据
  • 2025年更新!人工智能企业数据库
  • 全面沦陷:所有 LLM 与 AI 绘画模型已被攻破——红队实战全景报告(2025)
  • systemd服务管理深入实践从入门到自定义服务
  • 基于微信小程序的网络安全知识科普平台系统【源码文末联系】
  • 基于VUE的实验室使用管理系统[VUE]-计算机毕业设计源码+LW文档
  • 【单片机毕业设计】【mcugc-mcu911】基于单片机的多功能安防系统