给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
解题思路:
同样是一道回溯的问题,首先对数组进行排列,再放入dfs中遍历,对于每个数,可以选择,也可以不选择,不选择直接跳过,选择就放入res中并继续往下,记得要有回溯的过程,代码如下:
class Solution {
private:
vector<vector<int>> ans;
vector<int> res;
public:
void dfs(vector<int> nums, int index){
if(index == nums.size()){
ans.emplace_back(res);
return;
}
//不选择当前的数字
dfs(nums, index + 1);
//选择当前的数字
res.emplace_back(nums[index]);
dfs(nums, index + 1);
//回溯体现
res.pop_back();
}
vector<vector<int>> subsets(vector<int>& nums) {
sort(nums.begin(), nums.end());
dfs(nums, 0);
return ans;
}
};