leetcode332**(路径规划)

class Solution:
    def findItinerary(self, tickets: List[List[str]]) -> List[str]:
        tickets_dic=defaultdict(list)#这个调用是为了方便直接append。因为他会默认构建一个value是list的字典。
        for item in tickets:
            tickets_dic[item[0]].append(item[1])#把起始站和终点站转化为字典形式。起始站是key,终点站是以list形式存在的,对应起来。
        path = ['JFK']#因为初始站是JKF,把他固定下来
        def backtrack(start):
            if len(path)==len(tickets)+1:#当path的长度为tickets的长度+1时说明遍历完成。
                return True
            tickets_dic[start].sort()#按照字母顺序排序。
            for _ in tickets_dic[start]:
                end=tickets_dic[start].pop(0)#因为按照自然排序最小组合,所以删除的是排在前面的
                path.append(end)#添加到站。
                if backtrack(end):#到站在下一个递归中变成了初始站。如果存在的话,return T
                    return True
                path.pop()#回溯
                tickets_dic[start].append(end)#回溯
        backtrack('JFK')#递归调用,最一开始的初始站是JKF。
        return path



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值