diff --git a/java/207-Course-Schedule.java b/java/207-Course-Schedule.java new file mode 100644 index 000000000..3f82d707b --- /dev/null +++ b/java/207-Course-Schedule.java @@ -0,0 +1,39 @@ +class Solution { + public boolean canFinish(int numCourses, int[][] prerequisites) { + List> adj = new ArrayList<>(); + for (int i = 0; i < numCourses; i++) { + adj.add(new ArrayList<>()); + } + + for (int i = 0; i < prerequisites.length; i++) { + adj.get(prerequisites[i][0]).add(prerequisites[i][1]); + } + + int[] visited = new int[numCourses]; + for (int i = 0; i < numCourses; i++) { + if (visited[i] == 0) { + if (isCyclic(adj, visited, i)) { + return false; + } + } + } + return true; + } + + private boolean isCyclic(List> adj, int[] visited, int curr) { + if (visited[curr] == 2) { + return true; + } + + visited[curr] = 2; + for (int i = 0; i < adj.get(curr).size(); i++) { + if (visited[adj.get(curr).get(i)] != 1) { + if (isCyclic(adj, visited, adj.get(curr).get(i))) { + return true; + } + } + } + visited[curr] = 1; + return false; + } +}