Leetcode Graph BFS 解題心得

Leetcode Graph BFS 解題心得

Leetcode Graph BFS 解題心得

Graph 真的都有點難度

在top interview 150 中有兩種題型,

一種是爬樓梯遊戲(取自909. Snakes and Ladders),會給定一個array,特殊位置會給定數字,要跳到對應的位置,其餘的會是-1,找最短路徑

一種是字串變換,一次改動一個元素,問最少變化的次數(433. Minimum Genetic Mutation)

以graph 參考別人解題思路找到的基本公式

class Solution:    def minMutation(self, startGene: str, endGene: str, bank: List[str]) -> int:        def is_valid(a,b):            #某種判斷式        checked = set() #檢查是否訪問        to_visit = collections.deque() #(要訪問的東西,目前記錄的次數)        to_visit.append((startGene, 0)) #給定初始值        while to_visit:            gen, step = to_visit.popleft() #開始不停走訪拿出最左邊            if gen==endGene:                return step #其中一種結束條件,表示達到目標            for gen2 in bank:                 #這個的時間表現不是很好,如果是一次變一個數值的題型                #可以用Hash去保存,取得比較好的時間表現                if is_valid(gen, gen2) and gen2 not in checked:                    to_visit.append((gen2, step+1))                    checked.add(gen2)        return -1

基本模式就是先給定起始,然後不停去把合格的放入要檢查的清單,如此走訪就可以解題

Comments

Loading comments…

Leave a Comment