dom*_*nik 4 list permutation kotlin
是否有一种简单的(甚至可能是 Kotlin 的方式)来生成给定列表(包含重复元素)的所有排列,其中:
例如:
鉴于列表:[A, B, C, A, B, D, A],我期望以下结果:
[A, B, C, D], [A, C, B, D], [B, C, A, D], [C, A, B, D], [C, B, A, A], [B, C, D, A],
...(如有更多组合)
以下结果无效:
[A, B, C, A, D](重复A)
[A, B, C, A](A 重复,D 缺失)
[A, C, D, B](错误的顺序)
感谢您的帮助。
小智 5
尝试下面这个解决方案。大量递归但易于理解(最接近我们的想法)。一个缺点是内存的使用。由你来编写一个非递归的。
fun <T> allPermutations(set: Set<T>): Set<List<T>> {
if (set.isEmpty()) return emptySet()
fun <T> _allPermutations(list: List<T>): Set<List<T>> {
if (list.isEmpty()) return setOf(emptyList())
val result: MutableSet<List<T>> = mutableSetOf()
for (i in list.indices) {
_allPermutations(list - list[i]).forEach {
item -> result.add(item + list[i])
}
}
return result
}
return _allPermutations(set.toList())
}
Run Code Online (Sandbox Code Playgroud)
输入是一个集合。对于您的问题,您需要做的就是在调用该方法之前将列表转换为集合:allPermutations (yourList.toSet())
| 归档时间: |
|
| 查看次数: |
10620 次 |
| 最近记录: |