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; }