Subsets

Enumerate all subsets of a unique array — bitmask, recursion, or iterative "double" pattern.

Medium
Time O(n * 2^n) Space O(n * 2^n)
LeetCode
2 min read
subsets backtracking bitmask

Problem#

Given an array of unique integers, return all 2^n subsets in any order.

Examples#

  • [1,2,3][[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]

Constraints#

  • 1 <= n <= 10.

Approach#

Backtracking — DFS with include/exclude branches.
Iterative doubling — for each element, append it to every existing subset.

Solution#

Subsets (iterative doubling)
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>> out = {{}};
for (int x : nums) {
int sz = out.size();
for (int i = 0; i < sz; ++i) {
out.push_back(out[i]);
out.back().push_back(x);
}
}
return out;
}
};

Editorial#

The iterative doubling reflects a clean invariant: after processing the first k elements, out contains all 2^k subsets of them. Adding the next element doubles the list — half retain previous subsets, half append the new element.

Complexity#

  • Time: O(n * 2^n).
  • Space: O(n * 2^n).

Concept revision#

Search ESC

Keyboard shortcuts

Shortcuts are disabled while typing in inputs.