332.重新安排行程

难度:中等
题目描述:
332.重新安排行程_第1张图片
思路总结

  • 方法一:字典,优先队列,DFS递归。

这个方法属实精彩,利用了最小堆的排序特性满足了题目中的说明1,对于一些特殊用例,比如循环返回图(具体见参考1)使用DFS递归,实现了先存较小的,也很好的满足了说明1。

参考阅读:

  • Java题解,思路最详细
  • Python优先队列模块heapq

题解一:

import heapq
class Solution:
    def findItinerary(self, tickets: List[List[str]]) -> List[str]:
        #思路:将其转换为字典,其中每个值为一个heap,然后一个个往后查
        tk = {}
        for t in tickets:
            if t[0] not in tk.keys():
                tk[t[0]] = []
            heapq.heappush(tk[t[0]], t[1])
        res = []
        self.visit(tk, "JFK", res)
        return res
    def visit(self,tk, pre, res):
        #DFS遍历图
        while pre in tk.keys() and len(tk[pre])>0:
            nxt = heapq.heappop(tk[pre])
            self.visit(tk, nxt, res)
        res.insert(0,pre)

题解一结果:
在这里插入图片描述

你可能感兴趣的:(朱滕威的面试之路)