LEETCODE 全排列 II

class Solution {
public:
    unordered_set<int> _set;
    vector<vector<int>> reslist;
    void helper(int pos,vector<int>& nums ,vector<int> &res)
    {
        int lastval = -100;
        for(int i = 0 ; i < nums.size();i++)
        {
            
            if(_set.count(i) == 0 && nums[i] != lastval ) // 已經選過的或者和上一次循環值相同的 就不用選了
            {
               
                 res[pos] = nums[i];
                 lastval = nums[i];
                   _set.insert(i);
               
            }
            else
            {
                continue;
            }
            
            helper(pos+1,nums,res);
            _set.erase(i);
        }
        
       if(pos == nums.size() - 1)
       {
           reslist.push_back(res);
       }
       
    }
    
    vector<vector<int>> permuteUnique(vector<int>& nums) {
        vector<int> res(nums.size());
        for(int i = 0 ; i < nums.size() ; i++)
        {
            res[i] == -1;
        }
        sort(nums.begin(),nums.end());
        helper(0,nums,res);
        return reslist;
    }
};

方法2:效率更差

class Solution {
public:
    vector<vector<int>>res;
    vector<int>clist;
    unordered_set<int> _set;
    unordered_set<string>_set2;
    vector<vector<int>> permuteUnique(vector<int>& nums) {
        str = "";
        helper(nums);
        return res;
    }
    string str;
    void helper(vector<int>& nums)
    {
        if(nums.size()  == clist.size())
        {
            
            if(!_set2.count(str))
            {
                res.push_back(clist);
                _set2.insert(str);
            }
            return;
        }
        
        for(int i = 0 ; i < nums.size();i++)
        {
            if(!_set.count(i))
            {
                clist.push_back(nums[i]);
                str.push_back(to_string(nums[i])[0])   ;
                _set.insert(i);
                helper(nums);
                _set.erase(i);
                str.pop_back();
                clist.erase( clist.begin() + clist.size() - 1  );
            }
        }
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章