先一路走到黑,然后再一步一步往回走。回溯没毛病。
class Solution {public: vector> res; vector > subsetsWithDup(vector & nums) { if(nums.empty()){ return res; } set > temp; vector ans; dfs(0,nums,temp,ans); for(auto ff:temp) { res.push_back(ff); } return res; } void dfs(int pos,vector num, set >& filter ,vector 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); }};