class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>> res;
vector<int> temp;
DFS(res, nums, 0, temp);
return res;
}
void DFS(vector<vector<int>>& res, vector<int> nums, int startPoint, vector<int> temp)
{
res.push_back(temp);
for (int i = startPoint; i < nums.size(); i++)
{
temp.push_back(nums[i]);
DFS(res, nums, i + 1, temp);
temp.pop_back();
}
}
};
class Solution {
public:
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
vector<vector<int>>res;
vector<int>temp;
sort(nums.begin(), nums.end());
DFS(res, temp, nums, 0);
return res;
}
void DFS(vector<vector<int>>& res, vector<int>& temp, vector<int>& nums, int start)
{
res.push_back(temp);
if (start == nums.size())
{
return;
}
for (int i = start; i < nums.size(); i++)
{
if (i - 1 >= start && nums[i] == nums[i - 1])
continue;
temp.push_back(nums[i]);
DFS(res, temp, nums, i + 1);
temp.pop_back();
}
}
};