/* 题意:给一个集合,求所有的排列 做法: */ class Solution { public: vector<vector<int> >res;int count ; void dfs(int A[],vector<int>num,int n,int cur){ if(cur == n){//找到一个排列 res.push_back(vector<int>()); for(int i = 0 ; i < n ; i++){ res[count].push_back(A[i]); } count ++; return; } for(int i = 0 ; i < n ; i++){ if(!i || num[i]!=num[i-1]){ //排除重复的情况如{1,1,1}这种 int c1 = 0,c2 = 0; for(int j = 0 ; j <cur ; j++) if(A[j] == num[i]) c1++; //统计当前集合里num[i]的个数 for(int j = 0 ; j <n ; j++) if(num[j] == num[i]) c2++; //统计初始集合里num[i]的个数 if(c1<c2){ //当当前集合num[i]的个数小于初始集合num[i]的个数是才进行下一步搜索。 A[cur] = num[i]; dfs(A,num,n,cur+1); } } } } vector<vector<int> > permute(vector<int> &num) { count = 0; int n = num.size(); int A[n]; dfs(A,num,n,0); return res; } };