332. 重新安排行程
Medium
思路
抽象题目大意
- 所有的机票,指定了两个节点和一个变,我们可以构造成一个图,使用邻接表表示
- 题目要求的值,就是求欧拉路径
- 题目中提示说假定所有机票至少存在一种合理的行程,即,我们构造的图一定是半欧拉图
欧拉图的相关文档
- 这道题主要利用半欧拉图中的一个特性:一个节点的出度为0的时候,说明这个节点为终点
- 将走过的路径,即节点的边删除。遇到出度为0的节点时,说明为终点
- 使用栈存放终点的节点,然后进行回溯。剩下的图为新的子问题
- 最终结果即为栈中的元素取反
建议草稿纸上演算一下,一图胜千言,参考解题:链接
以上,尝试一下代码,AC!
代码
python3
class Solution:
def findItinerary(self, tickets: List[List[str]]) -> List[str]:
graph = collections.defaultdict(list)
for t in tickets:
graph[t[0]].append(t[1])
graph[t[0]].sort()
res = []
def helper(node):
while graph[node]:
helper(graph[node].pop(0))
res.append(node)
helper('JFK')
return res[::-1]