给你一个整数数组nums
,数组中的元素互不相同。返回该数组所有可能的子集(幂集)。解集不能包含重复的子集。你可以按任意顺序返回解集。
示例 1:
输入:nums = [1,2,3] 输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
示例 2:
输入:nums = [0] 输出:[[],[0]]
回溯:
class Solution {
public:
vector<vector<int>> ret;
void dfs(const vector<int>& nums,int cur,vector<int>& s){
if(cur==nums.size()){//位数从0开始,位数等于原序列长度时返回
ret.push_back(s);//子集加入ret
return;
}
dfs(nums,cur+1,s);//递归进入,不选当前元素
s.push_back(nums[cur]);//递归进入,选当前元素
dfs(nums,cur+1,s);
s.pop_back();//回溯,弹出最后一个元素
}
vector<vector<int>> subsets(vector<int>& nums) {
vector<int> s;//当前枚举的子集
dfs(nums,0,s);
return ret;
}
};