字符全排列

问题一:对字符串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=='')
        cout<<s<<endl;
    else
    {
        for(char *p=sbegin;*p!='';p++)
        {
            swap(*sbegin,*p);
            permutation(s,sbegin+1);
            swap(*sbegin,*p);
        }
    }
}
int main()
{
    char s[]="abc";
    permutation(s,s);
}

原文地址:https://www.cnblogs.com/beaglebone/p/5878267.html