leetcode_332. 重新安排行程 python3

举报
悲恋花丶无心之人 发表于 2021/02/04 23:45:35 2021/02/04
【摘要】 目录 一、题目内容 二、解题思路 三、代码 一、题目内容 给定一个机票的字符串二维数组 [from, to],子数组中的两个成员分别表示飞机出发和降落的机场地点,对该行程进行重新规划排序。所有这些机票都属于一个从 JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK 开始。 说明: 如果存在多种有效的行程,你可以按字符自然排序返回最小...

目录

一、题目内容

二、解题思路

三、代码


一、题目内容

给定一个机票的字符串二维数组 [from, to],子数组中的两个成员分别表示飞机出发和降落的机场地点,对该行程进行重新规划排序。所有这些机票都属于一个从 JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK 开始

说明:

如果存在多种有效的行程,你可以按字符自然排序返回最小的行程组合。例如,行程 ["JFK", "LGA"] 与 ["JFK", "LGB"] 相比就更小,排序更靠前
所有的机场都用三个大写字母表示(机场代码)。
假定所有机票至少存在一种合理的行程。

示例 1:

输入: [["MUC", "LHR"], ["JFK", "MUC"], ["SFO", "SJC"], ["LHR", "SFO"]]
输出: ["JFK", "MUC", "LHR", "SFO", "SJC"]

示例 2:

输入: [["JFK","SFO"],["JFK","ATL"],["SFO","ATL"],["ATL","JFK"],["ATL","SFO"]]
输出: ["JFK","ATL","JFK","SFO","ATL","SFO"]
解释: 另一种有效的行程是 ["JFK","SFO","ATL","JFK","ATL","SFO"]。但是它自然排序更大更靠后。

二、解题思路

1.sorted()函数可以为字母组合排序

2.邻接表:key值为出发地,value值包含一个或多个目的地,例如[A,B][A,C][A:[B,C]]

3.栈stack存放路径,can_fly为False则表示既不在key中也不在对应的value中,则pop并加入到所属key对应value的末尾(append)

三、代码


      class Solution:
      def findItinerary(self, tickets):
       edges = {}
       edges["count"] = len(tickets)
      for ticket in tickets:
      if ticket[0] not in edges:
       edges[ticket[0]] = []
       edges[ticket[0]].append(ticket[1])
       stack = ["JFK"]
      def iter_dfs(stack, edges):
      if edges["count"] == 0:
      return True
      if stack[-1] not in edges or not edges[stack[-1]]:
      return False
       sorted_edges_stack_last = sorted(edges[stack[-1]])
      for cur in sorted_edges_stack_last:
       stack.append(cur)
       edges[stack[-2]].remove(cur)
       edges["count"] -= 1
       can_fly = iter_dfs(stack, edges)
      if can_fly:
      return True
       stack.pop()
       edges[stack[-1]].append(cur)  # add to last
       edges["count"] += 1
      return False
       iter_dfs(stack, edges)
      return stack
      if __name__ == '__main__':
       tickets = [["JFK","SFO"],["JFK","ATL"],["SFO","ATL"],["ATL","JFK"],["ATL","SFO"]]
       s = Solution()
       ans = s.findItinerary(tickets)
       print(ans)
  
 

文章来源: nickhuang1996.blog.csdn.net,作者:悲恋花丶无心之人,版权归原作者所有,如需转载,请联系作者。

原文链接:nickhuang1996.blog.csdn.net/article/details/108266928

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。