![JAR search and dependency download from the Maven repository](/logo.png)
g0801_0900.s0823_binary_trees_with_factors.Solution.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-kotlin Show documentation
Show all versions of leetcode-in-kotlin Show documentation
Kotlin-based LeetCode algorithm problem solutions, regularly updated
package g0801_0900.s0823_binary_trees_with_factors
// #Medium #Array #Hash_Table #Dynamic_Programming
// #2023_03_25_Time_298_ms_(100.00%)_Space_45.1_MB_(100.00%)dsecx
class Solution {
private val dp: MutableMap = HashMap()
private val nums: MutableMap = HashMap()
fun numFactoredBinaryTrees(arr: IntArray): Int {
arr.sort()
for (i in arr.indices) {
nums[arr[i]] = i
}
var ans: Long = 0
for (i in arr.indices.reversed()) {
ans = (ans % MOD + recursion(arr, arr[i], i) % MOD) % MOD
}
return ans.toInt()
}
private fun recursion(arr: IntArray, v: Int, idx: Int): Long {
if (dp.containsKey(v)) {
return dp[v]!!
}
var ret: Long = 1
for (i in 0 until idx) {
val child = arr[i]
if (v % child == 0 && nums.containsKey(v / child)) {
ret += (
(
recursion(arr, child, nums[arr[i]]!!) %
MOD
* recursion(arr, v / child, nums[v / child]!!) %
MOD
) %
MOD
)
}
}
dp[v] = ret
return ret
}
companion object {
private const val MOD = 1e9.toInt() + 7
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy