Skip to content

Files

Latest commit

Aug 14, 2022
171abf2 · Aug 14, 2022

History

History
31 lines (25 loc) · 856 Bytes

90.subsets-ii.md

File metadata and controls

31 lines (25 loc) · 856 Bytes
private val results = mutableListOf<List<Int>>()

fun subsetsWithDup(nums: IntArray): List<List<Int>> {
    nums.sort()
    for (size in 0..nums.size) {
        dfs(nums, 0, size, ArrayDeque<Int>())
    }
    return results    
}

private fun dfs(nums: IntArray, startIndex: Int, size: Int, subset: ArrayDeque<Int>) {
    if (size == 0) {
        results.add(ArrayList<Int>(subset))
        return
    }

    for (i in startIndex until nums.size) {
        if (i > startIndex && nums[i] == nums[i - 1]) continue

        subset.addLast(nums[i])
        dfs(nums, i + 1, size - 1, subset)
        subset.removeLast()
    }
}
  • Time Complexity: O(n * 2^n), n for iterating each size, 2^n for subsets.
  • Space Complexity: O(n), we use at most O(n) space for DFS.