Power Set / Subsets
Problem Statement
Given a set of distinct integers, return all possible subsets (the power set).
Example: Input: [1,2] → Output: [[], [1], [2], [1,2]]
Approach 1: Recursive Backtracking
Explanation: Decide for each element whether to include it in current subset and recurse.
Time Complexity: O(2ⁿ × n) (all subsets × copy time)
Space Complexity: O(n) (recursion stack)
function backtrack(index, current): if index == n: add current copy to result return // Include nums[index] backtrack(index+1, current + [nums[index]]) // Exclude nums[index] backtrack(index+1, current) backtrack(0, [])
Approach 2: Iterative
Explanation: Start with empty subset, for each number, add it to all existing subsets.
Time Complexity: O(2ⁿ × n)
Space Complexity: O(2ⁿ × n)
result = [[]] for num in nums: for subset in result.copy(): result.append(subset + [num]) return result
Approach 3: Bit Manipulation
Explanation: Each subset corresponds to a bitmask of length n.
Time Complexity: O(2ⁿ × n)
Space Complexity: O(2ⁿ × n)
for mask in 0..2^n-1: subset = [] for i in 0..n-1: if mask & (1 << i): subset.append(nums[i]) add subset to result return result