给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。

说明:解集不能包含重复的子集。

示例:

输入: nums = [1,2,3]
输出:
[
  [3],
  [1],
  [2],
  [1,2,3],
  [1,3],
  [2,3],
  [1,2],
  []
]

 

class Solution {
public:
    vector<vector<int>> subsets(vector<int>& nums) {
        int mask, i, j;
        vector<vector<int>> power_set;
        vector<int> subset;
        power_set.push_back({});
        for (i = 1; i < (1 << nums.size()); ++i)
        {
            mask = i;
            subset.clear();
            j = nums.size() - 1;
            while (mask)
            {
                if (mask & 1)
                    subset.push_back(nums[j]);
                mask >>= 1;
                --j;
            }
            power_set.push_back(subset);
        }
        return power_set;
    }
};