leetcode- Permutations II

题目:

 Permutations II 

Given a collection of numbers that might contain duplicates, return all possible unique permutations.

For example,
[1,1,2] have the following unique permutations:
[1,1,2][1,2,1], and [2,1,1].



class Solution {
public:
    vector<vector<int>> permuteUnique(vector<int>& nums) {
         vector<vector<int>>  res;
        if(nums.empty())
            return res;
        permute(nums,0,res);
        return res;
    }
    
     void permute(vector<int>& nums,int index, vector<vector<int>>  &res)
    {
        if(index==nums.size())
        {
            res.push_back(nums);
            return;
        }
        
        permute(nums,index+1,res);
        unordered_set<int> prev;//用哈希表记录。避免反复值
        prev.emplace(nums[index]);
        
        for(int i=index+1;i<nums.size();++i)
        {
            if(prev.count(nums[i])>0)//忽略反复值
                continue;
             prev.emplace(nums[i]);
            swap(nums[index],nums[i]);
            permute(nums,index+1,res);
            swap(nums[index],nums[i]);
        }
    }
};


posted @ 2017-06-29 21:32  jhcelue  阅读(122)  评论(0编辑  收藏  举报