From 20c7e00bfcf807cf6c291c0f4c1cda0f91f3d363 Mon Sep 17 00:00:00 2001 From: Xiang LI Date: Fri, 29 May 2020 18:18:41 +0200 Subject: [PATCH] add kotlin solution for 207 Course-Schedule.kt --- .../29-Course-Schedule/Course-Schedule.kt | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 May-LeetCoding-Challenge/29-Course-Schedule/Course-Schedule.kt diff --git a/May-LeetCoding-Challenge/29-Course-Schedule/Course-Schedule.kt b/May-LeetCoding-Challenge/29-Course-Schedule/Course-Schedule.kt new file mode 100644 index 0000000..3319d2c --- /dev/null +++ b/May-LeetCoding-Challenge/29-Course-Schedule/Course-Schedule.kt @@ -0,0 +1,73 @@ +class CourseScheduleKotlin207 { + fun canFinish(numCourses: Int, prerequisites: Array): Boolean { + // 1 true, -1 false, 0 not judge + val coursesArray = IntArray(numCourses) + val graph: MutableMap> = HashMap() + for (pre in prerequisites) { + graph.computeIfAbsent(pre[1]) { mutableListOf() }.add(pre[0]) + } + for (index in coursesArray.indices) { + if (!dfs(index, coursesArray, graph)) { + return false + } + } + return true + } + + // true -> can finish + private fun dfs( + current: Int, + coursesArray: IntArray, + graph: Map> + ): Boolean { + return when { + coursesArray[current] == -1 -> false + coursesArray[current] == 1 -> true + else -> { + coursesArray[current] = -1 + graph[current]?.forEach { + if (!dfs(it, coursesArray, graph)) { + return false + } + } + coursesArray[current] = 1 + true + } + } + } + /* + fun canFinish(numCourses: Int, prerequisites: Array): Boolean { + val coursesArray = IntArray(numCourses) + val graph: MutableMap> = HashMap() + for (pre in prerequisites) { + graph.computeIfAbsent(pre[1]) { mutableListOf() }.add(pre[0]) + ++coursesArray[pre[0]] + } + val queue: Queue = LinkedList() + coursesArray.forEachIndexed { index, i -> + if (i == 0) { + queue.offer(index) + } + } + while (queue.isNotEmpty()) { + val current = queue.poll() + graph[current]?.forEach { + if (--coursesArray[it] == 0) { + queue.offer(it) + } + } + } + return coursesArray.count { it == 0 } == numCourses + } + */ +} + +fun main() { + val solution = CourseScheduleKotlin207() + // true + println(solution.canFinish(2, arrayOf(intArrayOf(0, 1)))) + // false + println(solution.canFinish(2, arrayOf(intArrayOf(0, 1), intArrayOf(1, 0)))) + // true + println(solution.canFinish(3, arrayOf(intArrayOf(2, 1), intArrayOf(1, 0)))) +} \ No newline at end of file