Skip to content

Latest commit

 

History

History
32 lines (26 loc) · 874 Bytes

File metadata and controls

32 lines (26 loc) · 874 Bytes
private val results = mutableListOf<List<Int>>()

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

private fun dfs(nums: IntArray, startIndex: Int, size: Int, combination: ArrayDeque<Int>) {
    if (size == 0) {
        results.add(ArrayList<Int>(combination))
        return
    }
    
    for (i in startIndex until nums.size) {
        // Prune
        if (nums.size - i < size) break

        combination.addLast(nums[i])
        dfs(nums, i + 1, size - 1, combination)
        // Backtracking
        combination.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.