每日一練 332 重新安排行程

2021-10-23 22:20:34 字數 1315 閱讀 7709

給定乙個機票的字串二維陣列 [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"]。但是它自然排序更大更靠後。

首先先把圖的鄰接表存進字典,並且按字典序排序,然後從『jfk』開始深搜,每前進一層就減去一條路徑,直到某個起點不存在路徑的時候就會跳出while迴圈進行回溯,相對先找不到路徑的一定是放在相對後面,所以當前搜尋的起點from會插在當前輸出路徑的第乙個位置。

class solution:

def finditinerary(self, tickets: list[list[str]]) -> list[str]:

d = collections.defaultdict(list) #鄰接表

for f, t in tickets:

d[f] += [t] #路徑存進鄰接表

for f in d:

d[f].sort() #鄰接表排序

ans =

def dfs(f): #深搜函式

while d[f]:

dfs(d[f].pop(0))#路徑檢索

ans.insert(0, f) #放在最前

dfs('jfk')

return ans

知識點:

collections.defaultdict([default_factory[, …]])

講解部落格連線:

332 重新安排行程

給定乙個機票的字串二維陣列 from,to 子陣列中的兩個成員分別表示飛機出發和降落的機場地點,對該行程進行重新規劃排序。所有這些機票都屬於乙個從jfk 甘迺迪國際機場 出發的先生,所以該行程必須從 jfk 出發。說明 如果存在多種有效的行程,你可以按字元自然排序返回最小的行程組合。例如,行程 jf...

332 重新安排行程

題目描述 如果存在多種有效的行程,請你按字元自然排序返回最小的行程組合。例如,行程 jfk lga 與 jfk lgb 相比就更小,排序更靠前 所有的機場都用三個大寫字母表示 機場 假定所有機票至少存在一種合理的行程。所有的機票必須都用一次 且 只能用一次。示例 1 輸入 muc lhr jfk m...

332 重新安排行程

給定乙個機票的字串二維陣列 from,to 子陣列中的兩個成員分別表示飛機出發和降落的機場地點,對該行程進行重新規劃排序。所有這些機票都屬於乙個從 jfk 甘迺迪國際機場 出發的先生,所以該行程必須從 jfk 開始。說明 如果存在多種有效的行程,你可以按字元自然排序返回最小的行程組合。例如,行程 j...