7.8 子集
题目
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
解题思路
递归算法,子集的特征和二叉树特征相同,遍历二叉树,每个叶子结点就是所有的最终结果
运行代码
class Solution {
public:
struct result
{
vector<int> res;
int pos;
bool used;
};
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>> res;
if(nums.size()==0)
return res;
queue<result> queue;
queue.push({vector<int>(),0,true});
queue.push({vector<int>(),0,false});
while(!queue.empty())
{
result node = queue.front();
queue.pop();
if(node.pos==nums.size()-1)
{
if(node.used)
node.res.push_back(nums[node.pos]);
res.push_back(node.res);
continue;
}
else
{
if(node.used)
node.res.push_back(nums[node.pos]);
queue.push({node.res,node.pos+1,true});
queue.push({node.res,node.pos+1,false});
}
}
return res;
}
};