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