Faaez Razeen

Reconstruct Itinerary

  • 3 min read
  • LC-Hard

3 years ago

Solution

TimeSpaceExplanation
O()O()
def findItinerary(self, tickets: List[List[str]]) -> List[str]: adj = defaultdict(set) visits_left = defaultdict(lambda: 0) # Used in place of a set, since there can be duplicate directed edges for src, dest in tickets: adj[src].add(dest) trip = f'{src}-{dest}' visits_left[trip] += 1 for src in adj: adj[src] = list(sorted(list(adj[src]))) path = [] def dfs(src, trips_taken_on_current_path): path.append(src) if trips_taken_on_current_path == len(tickets): return True for dest in adj[src]: trip = f'{src}-{dest}' if visits_left[trip] > 0: visits_left[trip] -= 1 if dfs(dest, trips_taken_on_current_path + 1): return True visits_left[trip] += 1 path.pop() return False dfs('JFK', 0) return path