LeetCode happy brush title twenty-five days --47. Permutations II

47. Permutations II
Medium

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

Example:

Input: [1,1,2]
Output:
[
  [1,1,2],
  [1,2,1],
  [2,1,1]
]
Accepted
257,204
Submissions
622,317
 
C++ Method:
  Because this is too similar to the last one 46,so just let "set" to delete duplicate in vector
  we use this method
  Use this method to change to former code can pass.But this is poor performance
#include<set>
#include<vector>
#include<iostream>
using namespace std;


int main()
{
vector<int> vec;
vec = { 1, 2, 3, 4, 8, 9, 3, 2, 1, 0, 4, 8 };
//for loop just let vec begin to end give set,then evaluate set to vector again
set<int> st(vec.begin(), vec.end()); vec.assign(st.begin(), st.end()); vector<int>::iterator it; for (it = vec.begin(); it != vec.end(); it++)
//& means address,* means get value cout
<< *it<<endl; return 0; }
#include<stdio.h>
#include<iostream>
#include<string>
#include<vector>
#include<set>
using namespace std;
class Solution {
public:
    vector<vector<int>> permute(vector<int>& nums) {
        set<vector<int>> res;
        vector<vector<int>> res1;
        vector<int> out,visited(nums.size(),0);
        DFS(out,nums,res,visited,0);
        res1.assign(res.begin(), res.end());
        return res1;
    }

    void DFS(vector<int>& out,vector<int>& nums,set<vector<int>>& res,vector<int>& visited,int label)
    {
        if(label==nums.size()) {res.insert(out);return;}
        for(int i=0;i<nums.size();i++)
        {
            if(visited[i]==1) continue;
            out.push_back(nums[i]);
            visited[i]=1;
            DFS(out,nums,res,visited,label+1);
            out.pop_back();
            visited[i]=0;
        }
        return;

    }
};
int main()
{
    Solution s;
    vector<int> v;
    vector<vector<int>> res;
    v.push_back(1);
    v.push_back(1);
    v.push_back(2);
//    v.push_back(1);
//    v.push_back(4);
    res=s.permute(v);
    for (vector<vector<int>>::iterator it = res.begin(); it != res.end(); ++it){
        for (int i = 0; i < (*it).size(); ++i)
            cout << (*it)[i] << " " ;
        cout <<endl ;
        }
    //cout<<res<<endl;
    return 0;
}

 

Guess you like

Origin www.cnblogs.com/Marigolci/p/11248004.html