两次AC,第一次出错发生在没有对原始输入排序。 例如给出数据[4,1,4],如果不加排序,[4,1],[1,4]都会被放入set中,并且set并不能过滤掉这种情况。 但是如果排序后,就可以过滤掉重复情况。[1,4,4],产生[1,4],[1,4]就可以过滤掉重复的情况。
class Solution { public: void find(int start,vector<int>& nums,vector<int>& temp,set<vector<int>>& result) { result.insert(temp); for(int i=start;i<nums.size();i++) { temp.push_back(nums[i]); find(i+1,nums,temp,result); temp.pop_back(); } return; } vector<vector<int>> subsetsWithDup(vector<int>& nums) { sort(nums.begin(),nums.end()); vector<int> temp; set<vector<int>> result; find(0,nums,temp,result); vector<vector<int>> resultFinal; for(set<vector<int>>::iterator it=result.begin();it!=result.end();it++) resultFinal.push_back(*it); return resultFinal; } };