1. Cascading Iteration
Intuition
Initialize result = [[]]. For each element num in nums, take every existing subset currently in result, create a copy with num appended, and add the new subset back into result.
When to apply: When building subsets intuitively without bit logic or recursion.
Algorithm
- Step 1: Initialize result = [[]].
- Step 2: For each num in nums:
- Step 3: For each subset in current result: copy subset, append num, push to result.
- Step 4: Return result.
#include <iostream>#include <vector> using namespace std; vector<vector<int>> subsetsCascading(vector<int>& nums) { vector<vector<int>> res = {{}}; for (int num : nums) { int n = res.size(); for (int i = 0; i < n; ++i) { vector<int> sub = res[i]; sub.push_back(num); res.push_back(sub); } } return res;} int main() { vector<int> nums = {1, 2}; auto res = subsetsCascading(nums); cout << "Cascading size: " << res.size() << endl; // 4 return 0;}Time & Space Complexity
- Time complexity:
O(n * 2^n) - Space complexity:
O(1) auxiliary space