2025-09-18 17:06
Status: adult
Tags: leetcode leetcode-medium graphs Graphs Intro Course Schedule computer-science google
Course Schedule II
Code
from collections import defaultdict
class Solution(object):
def findOrder(self, numCourses, prerequisites):
"""
:type numCourses: int
:type prerequisites: List[List[int]]
:rtype: List[int]
"""
# edge case: no prereqs
if not prerequisites:
return [i for i in range(numCourses)]
d = defaultdict(list)
courses = prerequisites
res = []
for a, b in courses:
d[a].append(b)
UNVISITED = 0
VISITING = 1
VISITED = 2
states = [UNVISITED] * numCourses
def dfs(node):
state = states[node]
if state == 2:
return True
elif state == 1:
return False
states[node] = VISITING
for nei_node in d[node]:
if not dfs(nei_node):
return False
states[node] = VISITED
res.append(node)
return True
for i in range(numCourses):
if not dfs(i):
return []
return res
Explanation
- It’s just like Course Schedule, except we have to keep track of each visited element as they are visited. This is done by simply appending them to a result list
References
Me :)