DIGITAL GURU
Java DSA Portfolio

Bitmasking & Generating Subsets using Bits

Generate all 2^N subsets of a set using bitmasking numbers from 0 to 2^N - 1.

Anuj Kumar Singh Written by Anuj Kumar Singh (Lead Engineer, 13+ yrs exp) 5 min read Verified Spring Boot 3+ Guide

Real-World Analogy

Using bitmasks to generate subsets is like using a 3-bit binary counter ($000$ to $111$) where bit `1` means "take item" and bit `0` means "leave item"—generating all $2^3 = 8$ combinations automatically!

Bitmask Subset Generation

Iterate integer counter $i$ from $0$ to $(1 \ll N) - 1$. If $j$-th bit of $i$ is set, include $arr[j]$ in current subset.

Production Code Example:

SubsetsBitmask.java
import java.util.*;
public class SubsetsBitmask {
    public List<List<Integer>> subsets(int[] nums) {
        List<List<Integer>> res = new ArrayList<>();
        int n = nums.length, total = 1 << n;
        for (int i = 0; i < total; i++) {
            List<Integer> sub = new ArrayList<>();
            for (int j = 0; j < n; j++) {
                if ((i & (1 << j)) != 0) sub.add(nums[j]);
            }
            res.add(sub);
        }
        return res;
    }
}

Key Complexity & Algorithmic Takeaways:

When implementing Bitmasking & Generating Subsets using Bits in coding interviews and production applications, keep these core guidelines in mind:

  • Time Complexity Analysis: Always evaluate best-case, average-case, and worst-case time complexities ($O(1)$, $O(\log n)$, $O(n)$, $O(n \log n)$, $O(n^2)$).
  • Space Complexity & Memory Bounds: Account for auxiliary memory usage, call stack frame recursion overhead, and heap allocations.
  • Edge Cases & Validation: Test empty inputs, null pointers, single-element collections, duplicate values, and integer overflow bounds.
  • Optimal vs Naive Solutions: Start with a clear brute-force solution, then optimize using techniques like Hashing, Two Pointers, Windowing, or Dynamic Programming.

Summary Takeaway:

Mastering Bitmasking & Generating Subsets using Bits provides the foundational problem-solving skills needed to pass technical coding interviews at top tech companies and write ultra-performant software systems.

Time & Space

Generates all $2^N$ subsets in $O(N \cdot 2^N)$ time and $O(1)$ auxiliary space.