Permutations

/*
    题意:给一个集合,求所有的排列
    做法:
*/
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;
    }
};

 

posted @ 2015-04-20 20:08  SprayT  阅读(137)  评论(0编辑  收藏  举报