给你一个整数数组 nums
,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。
示例 1:
输入:nums = [1,2,3] 输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
示例 2:
输入:nums = [0] 输出:[[],[0]]
提示:
1 <= nums.length <= 10
-10 <= nums[i] <= 10
nums
中的所有元素 互不相同
class Solution //设定一个解决问题的类
{
private:
void dfs(vector<int>& nums,int dep,vector<vector<int>>&result,vector<int>¤t)
{
if(dep==nums.size())//递归出口,这里dfs的深度是数组元素的个数,也就是需要做出抉择的次数
{
result.push_back(current);//当能一条路走到黑的时候就将这个当前处理的子集加入的结果里
return;
}
current.push_back(nums[dep]);//第一种情况:选择当前这个数字,把这个数字加入到正在处理的子集当中
dfs(nums,dep+1,result,current);//继续向下递归
current.pop_back();//回归状态,可以理解为开了人生模拟器,分岔口一条路走完了重生回到分岔口初始状态重新进行选择
dfs(nums,dep+1,result,current);//第二种情况:不选择当前的数字
}
public:
vector<vector<int>> subsets(vector<int>& nums) //返回集合的幂集的函数
{
vector<vector<int>>result;//答案,表示一个数组元素是数组
vector<int>current;//当前正在处理的一个子集
dfs(nums,0,result,current);
return result;
}
};