首页 > 代码库 > 【leetcode】Permutations II

【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].

 
先排序,如果一个元素与上一个元素相等,且前面没有使用该元素,则该元素不参与当前排列
 
 
 1 class Solution { 2 public: 3     vector<vector<int> > permuteUnique(vector<int> &num) { 4         5         sort(num.begin(),num.end()); 6         vector<vector<int> > result; 7         vector<int> tmp; 8         vector<bool> visited(num.size()); 9         dfs(0,num,result,visited,tmp);10         return result;11        12     }13    14    15     void dfs(int level,vector<int> &num,vector<vector<int> > &result,vector<bool> &visited,vector<int> &tmp)16     {17         if(level==num.size())18         {19             result.push_back(tmp);20             return;21         }22        23         for(int i=0;i<num.size();i++)24         {25             if(!visited[i])26             {27                 if(i>=1&&((num[i]==num[i-1]&&visited[i-1])||(num[i]!=num[i-1]))||i==0)28                 {29                     visited[i]=true;30                     tmp.push_back(num[i]);31                     dfs(level+1,num,result,visited,tmp);32                     tmp.pop_back();33                     visited[i]=false;34                 }35             }36         }37     }38    39 };

 

 

【leetcode】Permutations II