diff --git a/contest/src/main/java/com/github/contest/design/DesignAlternativeSolution.kt b/contest/src/main/java/com/github/contest/design/DesignAlternativeSolution.kt new file mode 100644 index 0000000..05a2edc --- /dev/null +++ b/contest/src/main/java/com/github/contest/design/DesignAlternativeSolution.kt @@ -0,0 +1,29 @@ +package com.github.contest.design + +/** + * 341. Flatten Nested List Iterator + * Alternative Solution + */ + +class NestedIteratorAlternativeSolution(nestedList: List) { + + private val stack = ArrayDeque().apply { + nestedList.reversed().forEach { addFirst(it) } + } + + fun next(): Int { + if (!hasNext()) throw NoSuchElementException() + return stack.removeFirst().getInteger()!! + } + + fun hasNext(): Boolean { + while (stack.isNotEmpty()) { + val top = stack.first() + if (top.isInteger()) { + return true + } + stack.removeFirst().getList()?.reversed()?.forEach { stack.addFirst(it) } + } + return false + } +} \ No newline at end of file diff --git a/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt b/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt index cf8cc40..2239dd1 100644 --- a/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt +++ b/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt @@ -245,4 +245,49 @@ class CombinationIterator(characters: String, combinationLength: Int) { combine(index + 1, str, subset, store, limit) } +} + +/** + * 341. Flatten Nested List Iterator + */ + +class NestedInteger { + + fun isInteger() = true + + fun getInteger(): Int? { + return null + } + + fun getList(): List? { + return null + } +} + +class NestedIterator(nestedList: List) { + + private val store = mutableListOf() + + init { + nestedList.forEach { + dfs(it) + } + } + + private fun dfs(obj: NestedInteger) { + val action = obj.getInteger() + if (action != null) { + store.add(action) + return + } + + obj.getList()?.forEach { + dfs(it) + } + } + + + fun next(): Int = store.removeFirst() + + fun hasNext(): Boolean = store.isNotEmpty() } \ No newline at end of file