目录
题目

解法一:回溯
cpp
class Solution
{
private:
void backTrack(vector<vector<int>>& subsets, vector<int>& subset,
const vector<int>& nums, int startIndex)
{
subsets.push_back(subset);
for (int i {startIndex}; i < nums.size(); i++)
{
// 去重
if (i > startIndex && nums[i - 1] == nums[i])
continue;
subset.push_back(nums[i]);
backTrack(subsets, subset, nums, i + 1);
subset.pop_back();
}
}
public:
vector<vector<int>> subsetsWithDup(vector<int>& nums)
{
vector<vector<int>> subsets;
vector<int> subset;
sort(nums.begin(), nums.end());
backTrack(subsets, subset, nums, 0);
return subsets;
}
};