Array     Backtracking     Bit Manipulation     C++     Medium    

Problem Statement:

Given an integer array nums of unique elements, return all possible subsets (the power set).

The solution set must not contain duplicate subsets. Return the solution in any order.

 

Example 1:

Input: nums = [1,2,3]
Output: [[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]

Example 2:

Input: nums = [0]
Output: [[],[0]]

 

Constraints:

  • 1 <= nums.length <= 10
  • -10 <= nums[i] <= 10
  • All the numbers of nums are unique.

Solution:

  • Start with curr = [[]]
  • Iterate over nums. At each iteration, double the size of subsets.
  • To do this just take all current elements of curr. Append last seen element nums[i] to these arrays and push them back to curr.
 
#define pb push_back
class Solution {
public:
    vector<vector<int>> subsets(vector<int>& nums) {
        vector<vector<int>> curr;
        curr.pb({});
        for (int n: nums)
        {
            int sz=curr.size();
            for (int i=0; i<sz; i++){auto v = curr[i]; v.pb(n); curr.pb(v);}
        }
        return curr;
    }
};