給定乙個機票的字串二維陣列 [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...