首页 > 代码库 > 字符全排列

字符全排列

问题一:对字符串s,输出字符串S中字符的所有排列。例如:输入字符串"abc",其全排列是abc,acb,bac,bca,cab,cba;

方法一:这是一个深度优先搜索的过程。

void dfs(vector<string> &result,string & path,string s,int len){    if(len==s.size())    {        result.push_back(path);        return;    }    for(int i=0;i<s.size();i++)    {        if(path.find(s[i])==-1)        {            path.push_back(s[i]);            dfs(result,path,s,len+1);            path.pop_back();        }    }}int main(){    string str="abc";    vector<string> result;    string path;    dfs(result,path,str,0);}

方法二:递归的过程:首先求所有可能出现在第一个位置的字符,也就是把第一个字符与后面的所有字符交换。其次,固定第一个字符,求后面字符的全排列,也就是把第二个字符与后面的所有字符交换。一直递归下去。

void permutation(char *s,char *sbegin){    if(*sbegin==\0)        cout<<s<<endl;    else    {        for(char *p=sbegin;*p!=\0;p++)        {            swap(*sbegin,*p);            permutation(s,sbegin+1);            swap(*sbegin,*p);        }    }}int main(){    char s[]="abc";    permutation(s,s);}

技术分享

 

字符全排列