leetcode752. 打开转盘锁(bfs)

你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字: ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’ 。每个拨轮可以自由旋转:例如把 ‘9’ 变为 ‘0’,‘0’ 变为 ‘9’ 。每次旋转都只能旋转一个拨轮的一位数字。

锁的初始数字为 ‘0000’ ,一个代表四个拨轮的数字的字符串。

列表 deadends 包含了一组死亡数字,一旦拨轮的数字和列表里的任何一个元素相同,这个锁将会被永久锁定,无法再被旋转。

字符串 target 代表可以解锁的数字,你需要给出最小的旋转次数,如果无论如何不能解锁,返回 -1。

示例 1:

输入:deadends = [“0201”,“0101”,“0102”,“1212”,“2002”], target = “0202”
输出:6
解释:
可能的移动序列为 “0000” -> “1000” -> “1100” -> “1200” -> “1201” -> “1202” -> “0202”。
注意 “0000” -> “0001” -> “0002” -> “0102” -> “0202” 这样的序列是不能解锁的,
因为当拨动到 “0102” 时这个锁就会被锁定。

代码

class Solution {public int openLock(String[] deadends, String target) {StringBuilder stringBuilder=new StringBuilder();HashSet<String> hashSet=new HashSet<>();for(String s:deadends) hashSet.add(s);if(hashSet.contains("0000")) return -1;//起点就锁住了Queue<String> queue=new LinkedList<>();queue.add("0000");HashSet<String> check=new HashSet<>();//记录以及访问过的字符串check.add("0000");int res=0;while (!queue.isEmpty()){int size=queue.size();for(int j=0;j<size;j++){String cur=queue.poll();for(int i=0;i<4;i++)//4个位置变化{stringBuilder=new StringBuilder(cur);char na=(char)(stringBuilder.charAt(i)+1),ns=(char)(stringBuilder.charAt(i)-1);//当前位置加一或减一if(na>'9') na='0'; else if(ns<'0') ns='9';stringBuilder.setCharAt(i,na);String temp=stringBuilder.toString();if(temp.equals(target)) return res+1;//找到了目标if(!hashSet.contains(temp)&&!check.contains(temp))//看看当前字符串有没有被锁或者被访问过了{queue.offer(temp);check.add(temp);}stringBuilder.setCharAt(i,ns);temp=stringBuilder.toString();if(temp.equals(target)) return res+1;if(!hashSet.contains(temp)&&!check.contains(temp)){queue.offer(temp);check.add(temp);}}}res++;}return -1;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/394001.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Object Pools 喷泉效果实现

摘录自&#xff1a;http://catlikecoding.com/unity/tutorials/object-pools/ 工程 效果图 工程里面有响应的注释 源码我就不单独放出来了

从头学习计算机网络_我如何通过从头开始构建网络爬虫来自动进行求职

从头学习计算机网络它是如何开始的故事 (The story of how it began) It was midnight on a Friday, my friends were out having a good time, and yet I was nailed to my computer screen typing away.星期五是午夜&#xff0c;我的朋友们出去玩得很开心&#xff0c;但我被钉…

php 动态生成文件,php动态程序生成静态文件示例

html>{title}{content}tmp.html是模板文件/** 说明&#xff1a;生成静态页面,tmp.html是模板文件&#xff0c;news.html是要生成的文件&#xff0c;**///1&#xff0c;先读取模板中内容$strfile_get_contents(tmp.html);//2&#xff0c;将指定的内容进行替换$title网站标题;…

网管的自我修养-网络系统

目录&#xff1a; 序章人际关系工具准备电脑维护网络系统弱电系统外设相关信息系统服务器相关机房建设其他网管网管&#xff0c;会管网络才算名副其实。管理一般中小企业的网络&#xff0c;具备CCNA及以上水平就可以了。 一、规划 首先要根据公司的人员工位数量、打印机传真等设…

thinkphp日志泄漏漏洞_ThinkPHP框架被爆任意代码执行漏洞

昨日ThinkPHP框架被爆出了一个php代码任意执行漏洞&#xff0c;黑客只需提交一段特殊的URL就可以在网站上执行恶意代码。ThinkPHP作为国内使用比较广泛的老牌PHP MVC框架&#xff0c;有不少创业公司或者项目都用了这个框架。不过大多数开发者和使用者并没有注意到本次漏洞的危害…

leetcode 113. 路径总和 II(Path Sum II)

目录 题目描述&#xff1a;示例:解法&#xff1a;题目描述&#xff1a; 给定一个二叉树和一个目标和&#xff0c;找到所有从根节点到叶子节点路径总和等于给定目标和的路径。 说明: 叶子节点是指没有子节点的节点。 示例: 给定如下二叉树&#xff0c;以及目标和 sum 22&#x…

VMware下配置固定ip,于本机进行通信。

虚拟机装好后&#xff0c;会生成虚拟的网络信息。点开VMware下虚拟网络编辑器。选择net模式的记录会发现设定好的网关及dns。 我们只需要在虚拟机上配好对于的ip 输入 dns 和网关即可转载于:https://blog.51cto.com/thlovesky/1967929

leetcode417. 太平洋大西洋水流问题(bfs)

给定一个 m x n 的非负整数矩阵来表示一片大陆上各个单元格的高度。“太平洋”处于大陆的左边界和上边界&#xff0c;而“大西洋”处于大陆的右边界和下边界。规定水流只能按照上、下、左、右四个方向流动&#xff0c;且只能从高到低或者在同等高度上流动。请找出那些水流既可以…

为什么测试喜欢ie_为什么我现在喜欢测试,以及为什么您也应该如此。

为什么测试喜欢ieby Evelyn Chan通过伊芙琳陈 为什么我现在喜欢测试&#xff0c;以及为什么您也应该如此。 (Why I now appreciate testing, and why you should, too.) There’s a common misconception that writing tests slows down development speed. While the benefit…

java制作五子棋的论文,基于java的五子棋的设计与实现.docx

摘要&#xff1a;随着社会的不断发展&#xff0c;我们的科技也不断的进步&#xff0c;现在我们的计算机也与我们的生活息息相关&#xff0c;这个时候 Internet能够让我们快速的知道自己想了解的知识。根据计算机的发展过程我们发现如今计算机应用的现状还有现在的发展趋势&…

tomcat 控制台乱码 windows下

tomcat启动时控制台乱码。但是看日志又是正常编码,只是控制台是乱码。 找到 config/logging.properties java.util.logging.ConsoleHandler.encoding UTF-8 改成 java.util.logging.ConsoleHandler.encoding GBK! 转载于:https://www.cnblogs.com/wangge01/p/10786101.html…

python获取重定向url_python中检测url重定向到的地址的例子

2016年最长的假期也过了&#xff0c;这周连上7天班&#xff0c;之前还觉得挺恐怖&#xff0c;没想到这周真是要忙死的节凑&#xff0c;还真没觉得多漫长&#xff0c;一晃明天就周五了&#xff0c;干运维的就是突发的事情多&#xff0c;冷不丁的不知道哪里就冒出个问题&#xff…

本地模式运行spark streaming程序(win7安装nc命令通信)

2019独角兽企业重金招聘Python工程师标准>>> 首先在win7上安装nc命令 下载nc程序包&#xff0c;放在c盘目录下&#xff0c;cmd打开命令行&#xff0c;进入nc目录&#xff0c;执行&#xff1a;nc -l -L -p 8888开始监控。再打开一个命令行窗口进入nc目录&#xff0c;…

leetcode343. 整数拆分(dp)

给定一个正整数 n&#xff0c;将其拆分为至少两个正整数的和&#xff0c;并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 示例 1: 输入: 2 输出: 1 解释: 2 1 1, 1 1 1。 class Solution {public int integerBreak(int n) {int[] dpnew int[n1];dp[1]1;for(int…

java验证码画布类型,【Java工具类】使用Kaptcha生成验证码写回页面中

1. 导入依赖导入kaptcha依赖:com.github.pengglekaptcha2.3.22. 编写配置类:Configurationpublic class KaptchaConfig {Beanpublic Producer kaptchaProducer() {Properties properties new Properties();properties.setProperty("kaptcha.image.width","100&…

如何用js获取浏览器URL中查询字符串的参数

首先要知道Location这个对象以及这个对象中的一些属性&#xff1a; href:设置或返回完整的url.如本博客首页返回http://www.cnblogs.com/wymninja/ host:设置或返回主机名和当前的URL的端口号。本博客首页返回www.cnblogs.com hostname:设置或返回当前URL的主机名。本博客首页返…

测试无服务器应用程序的最佳方法

Serverless is more than a cloud computing execution model. It changes the way we plan, build, and deploy apps. But it also changes the way we test our apps.无服务器不仅仅是云计算执行模型。 它改变了我们计划&#xff0c;构建和部署应用程序的方式。 但这也改变了…

nginx反向代理打印日志_nginx启用TCP反向代理日志配置

Nginx使用TCP反向代理日志配置不同于http修改nginx配置文档/usr/local/nginx/conf/nginx.conf 设置日志格式stream {log_format proxy ‘$remote_addr [$time_local] ‘‘$protocol $status $bytes_sent $bytes_received ‘‘$session_time "$upstream_addr" ‘‘&qu…

计算机系统的数制及转换

1、计算机的数制介绍 数制&#xff1a;计数的方法&#xff0c;指用一组固定的符号和统一的规则来表示数值的方法 数位&#xff1a;指数字符号在一个数中所处的位置 基数&#xff1a;指在某种进位计数制中&#xff0c;数位上所能使用的数字符号的个数 位权&#xff1a;指在某种进…

29. ExtJs - Struts2 整合(1) - 登录页面

转自&#xff1a;https://yarafa.iteye.com/blog/729197 初学 ExtJS&#xff0c;在此记录下学习过程中的点点滴滴&#xff0c;以备不时只需&#xff0c;也希望能给跟我一样的菜鸟一些帮助&#xff0c;老鸟请忽略。如有不当之处&#xff0c;欢迎指正。 开发环境&#xff1a; MyE…