先一路走到黑,然后再一步一步往回走。回溯没毛病。
class Solution { public: vector<vector<int>> res; vector<vector<int>> subsetsWithDup(vector<int>& nums) { if(nums.empty()){ return res; } set<vector<int>> temp; vector<int> ans; dfs(0,nums,temp,ans); for(auto ff:temp) { res.push_back(ff); } return res; } void dfs(int pos,vector<int> num, set<vector<int>>& filter ,vector<int> ans) { if(pos==num.size()) { sort(ans.begin(), ans.end()); filter.insert(ans); return; } dfs(pos+1,num,filter,ans); ans.push_back(num[pos]); dfs(pos+1,num,filter,ans); } };