210. 课程表 II

  1. [题目链接](210. 课程表 II - 力扣(LeetCode))

  2. 解题思路:和[课程表Ⅰ](207. 课程表 - ouyangxx - 博客园)思路一致,只不过每次都要收集答案。

  3. 代码

    
    class Solution:
        class node:
            def __init__(self):
                self.pre = 0   # 要依赖几个
                self.nexts = set()   # 能解锁哪些
    
    
        def findOrder(self, numCourses: int, prerequisites: List[List[int]]) -> List[int]:
    
            courses = {}
            cando = set(range(numCourses))    # 初始化,所有的课程都能够做
            for i in range(numCourses):
                courses[i] = self.node()
            for course in prerequisites:
                # course[0]不能先做  要先完成course[1]
                if course[0] in cando:
                    cando.remove(course[0])
                courses[course[0]].pre += 1
                courses[course[1]].nexts.add(course[0])
            ans = []
            while cando:
                cur_course = cando.pop()
                ans.append(cur_course)
                for next_course in courses[cur_course].nexts:
                    courses[next_course].pre -= 1
                    if courses[next_course].pre == 0:
                        cando.add(next_course)
            return [] if len(ans) != numCourses else ans
    
posted @ 2025-01-13 11:19  ouyangxx  阅读(15)  评论(0)    收藏  举报