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