LeetCode之Subsets II(Kotlin)

741 阅读1分钟

问题:


方法: 使用DFS遍历所有可能经过的节点,然后通过SET去掉重复的Case,最终可得到所有符合要求的结果。

package com.eric.leetcode

class SubsetsII {
    fun subsetsWithDup(nums: IntArray): List<List<Int>> {
        val result = mutableSetOf<List<Int>>()
        result.add(mutableListOf())
        for (index in nums.indices) {
            dfs(nums, index, mutableListOf(), result)
        }
        return result.toList()
    }

    private fun dfs(nums: IntArray, cur: Int, list: MutableList<Int>, result: MutableSet<List<Int>>) {
        val newList = mutableListOf<Int>()
        newList.addAll(list)
        newList.add(nums[cur])
        newList.sort()
        result.add(newList)
        for (index in cur + 1..nums.lastIndex) {
            dfs(nums, index, newList, result)
        }
    }
}

fun main() {
    val input = intArrayOf(1, 2, 2)
    val subsetsII = SubsetsII()
    subsetsII.subsetsWithDup(input)
}

有问题随时沟通

具体代码实现可以参考Github