leetcode BFS解題思路

2022-08-10 04:00:09 字數 990 閱讀 7924

word ladder

思路一:單向bfs, 使用visited陣列記錄哪些已經訪問過了, 訪問過的就不允許再次入隊, 同時這裡想到的是使用26個英文本母,列舉可能的取值, 類似brute force

思路二:雙向bfs,使用兩個set,這裡沒有使用queue,是因為需要在queue裡查詢,不方便.

另外,需要注意的一點是,每次遍歷時,都是取size較小的來做搜尋,初始時,各插入頭和尾,之後每次取最小的set來拓展, 這樣就實現了交替訪問兩個set,

是兩者的高度在 l/2, 這樣可以縮短一半的時間

單詞接龍 ii

思路一:因為要儲存最終的結果,所以圖是一定要建立的,通常我們可以通過維護每個節點的子節點,即乙個map,每個map裡是乙個陣列

我們可以稱之為children陣列或者parent陣列

2)每遍歷一層節點後,從wordlist中刪除掉這些節點,因為本題是有源節點的,從源節點看,前一層的節點不應該再次被遍歷,因為長度變長了

3)對於重複的問題,可以使用hastset來解

4)最後通過dfs,遍歷輸出結果

思路二:雙向bfs + dfs

解法跟思路一類似,只是需要建立兩個set,然後需要不斷交換兩個set

race car

思路一:bfs解法有乙個重要的技巧,即利用乙個set,記錄已經出現過的路徑,這樣bfs列舉到重複路徑時,可以直接跳過,這是乙個有效的prunning method.

open the lock

找最小步驟, 通常反應是使用bfs或者動態規劃

思路一: bfs

bfs通過儲存上一層的狀態, 來推出下一層狀態, 如此迴圈, 直到找到期望的值. 如果採用兩個set去加速bfs, 需要注意全域性的visited陣列需要在入隊之後再賦值, 因為如果在入隊(入set)之前進行判斷,

那麼begin set和end set中就不可能出現相同的元素了, 這樣永遠得不到結果. 只有允許先入隊元素, 再出隊時,先判斷是否找到解之後, 才可以根據是否visit過來過濾

ISBN解題思路

每一本正式出版的圖書都有乙個isbn號碼與之對應,isbn碼包括9位數字 1位識別碼和3位分隔符,其規定格式如 x xx x 其中符號 就是分隔符 鍵盤上的減號 最後一位是識別碼,例如0 670 82162 4就是乙個標準的isbn碼。isbn碼的首位數字表示書籍的出版語言,例如0代表英語 第乙個分...

Single Number解題思路

整數型陣列中,每個元素均出現兩次,除了乙個元素例外,如何找出這個元素?class solution for map iterator it m.begin it m.end it return 1 時間複雜度為o n n 空間複雜度為0 不需要額外空間 class solution return a...

Leetcode解題思路

所有簡單題的解題思路。question count the number of prime numbers less than a non negative number,n example input 10output 4explanation there are 4 prime numbers ...