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.pswp.cn/news/394001.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/394001.shtml
英文地址,請注明出處:http://en.pswp.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…