332.重新安排行程

难度:中等
题目描述:
在这里插入图片描述
思路总结

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

这个方法属实精彩,利用了最小堆的排序特性满足了题目中的说明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)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值