给定的字符串,按字典顺序输出所有的排列。
递归法;先对输入的字符串进行排序,然后先固定开头字符,将后续的字符串进行排列,以此递归,递归的出口为最后一个字符串为空则表明该排列完成,输出该排列。如输入abc,输出 abc acb bac bca cab cba 输入cabd, 输出abcd abdc acbd acdb adbc adcb bacd badc bcad bcda bdac bdca cabd cadb cbad cbda cdab cdba dabc dacb dbac dbca dcab dcba
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main()
{
void Permutation(string str,vector<string> &res,int start);
string str;
cin>>str;
vector<string> res;
if (str.empty())
return 0;
sort(str.begin(),str.end());
Permutation(str,res,0);
for(int i=0;i<res.size();i++)
cout<<res[i]<<" ";
return 0;
}
void Permutation(string str,vector<string> &res,int start)
{
if (start == str.size()-1)
{
res.push_back(str);
return;
}
else
{
for (int i=start;i<str.size();i++)
{
if(i!=start && str[start]==str[i])
continue;
swap(str[start],str[i]);
Permutation(str,res,start+1);
}
}
}