LeetCode 棧记劝、隊列变姨、優(yōu)先隊列專題 5:廣度優(yōu)先遍歷和圖的最短路徑問題

在圖中進行廣度優(yōu)先遍歷(BFS),進而尋找最短的路徑厌丑。

例:LeetCode 第 279 題:完全平方式

傳送門:279. 完全平方數定欧。

給定正整數 n,找到若干個完全平方數(比如 1, 4, 9, 16, ...)使得它們的和等于 n怒竿。你需要讓組成和的完全平方數的個數最少砍鸠。

示例 1:

輸入: n = 12
輸出: 3 
解釋: 12 = 4 + 4 + 4.

示例 2:

輸入: n = 13
輸出: 2
解釋: 13 = 4 + 9.

Python 代碼:


練習:LeetCode 第 127 題:單詞接龍

傳送門:127. 單詞接龍

給定兩個單詞(beginWordendWord)和一個字典愧口,找到從 beginWordendWord 的最短轉換序列的長度睦番。轉換需遵循如下規(guī)則:

  1. 每次轉換只能改變一個字母。
  2. 轉換過程中的中間單詞必須是字典中的單詞耍属。

說明:

  • 如果不存在這樣的轉換序列托嚣,返回 0。
  • 所有單詞具有相同的長度厚骗。
  • 所有單詞只由小寫字母組成示启。
  • 字典中不存在重復的單詞。
  • 你可以假設 beginWordendWord 是非空的领舰,且二者不相同夫嗓。

示例 1:

輸入:
beginWord = "hit",
endWord = "cog",
wordList = ["hot","dot","dog","lot","log","cog"]

輸出: 5

解釋: 一個最短轉換序列是 "hit" -> "hot" -> "dot" -> "dog" -> "cog",
     返回它的長度 5迟螺。

示例 2:

輸入:
beginWord = "hit"
endWord = "cog"
wordList = ["hot","dot","dog","lot","log"]

輸出: 0

解釋: endWord "cog" 不在字典中,所以無法進行轉換舍咖。

分析:這道題目可以建模成一個有向圖矩父,原問題就可以抽象成一個有向無權圖的最短路徑問題,可以稱之為套路的解決方案就是“廣度優(yōu)先遍歷(BFS)”排霉,明白了這些以后窍株,寫出正確的代碼就不是難事。

注意:(1)“圖”的廣度優(yōu)先遍歷使用的輔助數據結構有兩個攻柠,一個是隊列(用于一層一層排隊)球订,一個是一個數組或者是集合(用于判斷當前考慮的元素是否以前已經處理過)。

回顧:如果是樹結構的廣度優(yōu)先遍歷瑰钮,就無需設置輔助的數組或者集合用于判斷以前是否處理過冒滩。

其實,只要思路很清楚浪谴,寫出 AC 解就是自然而然的事情了开睡。這里我說的自然而然是相比較于要考慮很多特殊情況(邊界情況,+1或者 -1 情況)的簡單問題來說较店,這道問題應該劃分到簡單士八。畢竟廣度優(yōu)先遍歷是一個常規(guī)問題,不需要使用到什么小技巧梁呈。

下面談一談我在解題過程中的一些優(yōu)化:

(1)原來是遍歷 wordList婚度,看看目標 word 與它們只差一個字母的情況,此時在 wordList 很大的情況下效率低下官卡,故將 wordList 改成 HashSet蝗茁,利用 HashSet 查詢高效性避免了去遍歷這件事情;

(2)char[] 數組這件事情寻咒,其實還可以用 StringBuilder哮翘。(3)考慮能不能使用 Trie。

<script src="https://gist.github.com/liweiwei1419/8e7e0d3914e103c1d3ba4634033c9c9c.js"></script>

Python 代碼:

練習:LeetCode 第 126 題:單詞接龍 II

傳送門:126. 單詞接龍 II毛秘。

給定兩個單詞(beginWordendWord)和一個字典 wordList饭寺,找出所有從 beginWordendWord 的最短轉換序列。轉換需遵循如下規(guī)則:

  1. 每次轉換只能改變一個字母叫挟。
  2. 轉換過程中的中間單詞必須是字典中的單詞艰匙。

說明:

  • 如果不存在這樣的轉換序列,返回一個空列表抹恳。
  • 所有單詞具有相同的長度员凝。
  • 所有單詞只由小寫字母組成。
  • 字典中不存在重復的單詞奋献。
  • 你可以假設 beginWordendWord 是非空的健霹,且二者不相同旺上。

示例 1:

輸入:
beginWord = "hit",
endWord = "cog",
wordList = ["hot","dot","dog","lot","log","cog"]

輸出:
[
  ["hit","hot","dot","dog","cog"],
  ["hit","hot","lot","log","cog"]
]

示例 2:

輸入:
beginWord = "hit"
endWord = "cog"
wordList = ["hot","dot","dog","lot","log"]

輸出: []

解釋: endWord "cog" 不在字典中,所以不存在符合要求的轉換序列糖埋。

分析:很遺憾宣吱,我自己只寫出了超時解。不過思路至少還是對的阶捆。先使用廣度優(yōu)先搜索得到最短層數凌节,再使用深度優(yōu)先搜索得到所有的最短路徑。

Python 代碼:

(本節(jié)完)

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末洒试,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子朴上,更是在濱河造成了極大的恐慌垒棋,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件痪宰,死亡現(xiàn)場離奇詭異叼架,居然都是意外死亡,警方通過查閱死者的電腦和手機衣撬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門乖订,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人具练,你說我怎么就攤上這事乍构。” “怎么了扛点?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵哥遮,是天一觀的道長。 經常有香客問我陵究,道長眠饮,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任铜邮,我火速辦了婚禮仪召,結果婚禮上,老公的妹妹穿的比我還像新娘松蒜。我一直安慰自己扔茅,他們只是感情好,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布牍鞠。 她就那樣靜靜地躺著咖摹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪难述。 梳的紋絲不亂的頭發(fā)上萤晴,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天吐句,我揣著相機與錄音,去河邊找鬼店读。 笑死嗦枢,一個胖子當著我的面吹牛,可吹牛的內容都是我干的屯断。 我是一名探鬼主播文虏,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼殖演!你這毒婦竟也來了氧秘?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤趴久,失蹤者是張志新(化名)和其女友劉穎丸相,沒想到半個月后,有當地人在樹林里發(fā)現(xiàn)了一具尸體彼棍,經...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡灭忠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了座硕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弛作。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖华匾,靈堂內的尸體忽然破棺而出映琳,到底是詐尸還是另有隱情,我是刑警寧澤瘦真,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布刊头,位于F島的核電站,受9級特大地震影響诸尽,放射性物質發(fā)生泄漏原杂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一您机、第九天 我趴在偏房一處隱蔽的房頂上張望穿肄。 院中可真熱鬧,春花似錦际看、人聲如沸咸产。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至汉买,卻和暖如春捏悬,著一層夾襖步出監(jiān)牢的瞬間屑彻,已是汗流浹背验庙。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留社牲,地道東北人粪薛。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像搏恤,于是被迫代替她去往敵國和親违寿。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內容