leetcode(60)-课程表
你这个学期必须选修 numCourse 门课程,记为 0 到 numCourse-1 。
在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:[0,1]
给定课程总量以及它们的先决条件,请你判断是否可能完成所有课程的学习?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/course-schedule
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution:
def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool:
can_learn = [[] for _ in range(numCourses)]
learn = [None for _ in range(numCourses)]
sets = []
for (first,last) in prerequisites:
if first>= last:
sets.append(last)
can_learn[first].append(last)
def f(i):
if learn[i] is not None:return learn[i]
pre_c = can_learn[i]
learn[i] = False
for each in pre_c:
if not f(each):
return False
learn[i] = True
return True
for i in sets:
if learn[i] == True:continue
learn[i] = f(i)
if learn[i]==False:
return False
return True

浙公网安备 33010602011771号