leetcode_Permutations II _hard_暴力枚举法--回溯法

来源:互联网 发布:厦门大学网络教育 编辑:程序博客网 时间:2024/05/29 16:46

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

之前在算法竞赛那本书上有这样的题目,按照那种思路,代码按照题目格式以及自己的喜好写了下,可能有点乱:

class Solution {public:    void permutation_print(vector<int> &num,vector<int> &oneRes,vector<int> &vis,vector<vector<int> > &res,int cur)    {    if(cur==num.size())//递归返回边界    {    if(oneRes.size()>0)    res.push_back(oneRes);    return ;    }    else    {    int used,flag=0;//    for(int i=0; i<num.size(); i++)    {    if(vis[i]==0 && (flag==0||num[i]!=used))//保证既不重复,也不会{1,1,1}这样的没有输出    {    oneRes.push_back(num[i]);    vis[i]=1;    used=num[i];    flag=1;    permutation_print(num,oneRes,vis,res,cur+1);//递归调用    oneRes.erase(oneRes.begin()+cur);//恢复状态    vis[i]=0;<span style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;">//恢复状态</span>    }    }    }    }        vector<vector<int> > permuteUnique(vector<int> &num) {        vector<int> vis,oneRes;    vector<vector<int> > res;    vis.insert(vis.end(),num.size(),0);//初始化访问数组    sort(num.begin(),num.end());//一定要先进行排序    permutation_print(num,oneRes,vis,res,0);    return res;    }};





0 0