LeetCode OJ 之 Permutations II(排列 - 二)

来源:互联网 发布:linux spi dma 编辑:程序博客网 时间:2024/05/17 04:08

题目:

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

给一个数字集合,可能包含相等的数,返回所有的排列。

思路:

DFS。参考:http://blog.csdn.net/u012243115/article/details/42965749#t4 。

代码1:

class Solution {public:    vector<vector<int> > permuteUnique(vector<int> &num)     {        int len = num.size();        vector<vector<int> > result;        sort(num.begin(),num.end());        result.push_back(num);        if(len == 0)            return result;        while(next_permutation(num.begin(), num.end()))        {            result.push_back(num);        }        return result;    }};

代码2:

class Solution {public:    vector<vector<int> > permuteUnique(vector<int> &num)    {        vector<vector<int> > result;        DFS(num,0,result);        return result;    }    void DFS(vector<int> &num , int begin , vector<vector<int> > &result)    {        if(begin == num.size())        {            result.push_back(num);            return;        }        for(int i = begin ; i < num.size() ; i++)        {            if(!isSame(num , begin , i))            {                swap(num[begin],num[i]);                  DFS(num,begin+1,result);                  swap(num[i],num[begin]);             }        }    }    bool isSame(vector<int> num , int begin , int end)    {        for(int i = begin ; i < end ; i++)        {            if(num[end] == num[i])                return true;        }        return false;    }};


0 0
原创粉丝点击