LeetCode -90. 子集 II C++ (回溯法)

class Solution {
public:
    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
	        
		vector<vector<int> > result;
		vector<int> item;
		set<vector<int> > rset;
        result.push_back(item);
		sort(nums.begin(),nums.end());
		CreatSet(0,result,item,nums,rset);
		return result;
    }
    void CreatSet(int i ,vector<vector<int> > &result,
				vector<int> &item,vector<int> & nums,
				set<vector<int> > &rset){
    			if(i >= nums.size()) return;
    			item.push_back(nums[i]);
    			if(rset.find(item) ==rset.end()){
    				rset.insert(item);
    				result.push_back(item);
				}
				CreatSet(i+1,result,item,nums,rset);
				item.pop_back();
				CreatSet(i+1,result,item,nums,rset);
    			
	}
};
posted @ 2020-05-12 15:33  clienter  阅读(81)  评论(0)    收藏  举报