class Solution {
public:
vector<vector<int>>res;
vector<int>temp;
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
sort(nums.begin(),nums.end());
backtracking(nums,0);
return res;
}
void backtracking(vector<int>&nums,int st)
{
if(temp.size()<=nums.size())
{
res.push_back(temp);
}
else
return;
for(int i=st;i<nums.size();i++)
{
//下面两行代码是精髓,用来去除重复
if(i>st&&nums[i]==nums[i-1])
continue;
temp.push_back(nums[i]);
backtracking(nums,i+1);
temp.pop_back();
}
}
};