输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
思路1:在stl中有排列的相关函数,可以直接来
vector<string> Permutation(string str) {
vector<string> answer;
if(str.empty())
return answer;
sort(str.begin(),str.end());
do{
answer.push_back(str);
}while(next_permutation(str.begin(),str.end()));
return answer;
}
思路2:自己写全排列,然后排序
class Solution {
public:
vector<string> vec;
vector<string> Permutation(string str) {
PermutationHelp(str,0,str.size()-1);
sort(vec.begin(),vec.end());
return vec;
}
void PermutationHelp(string &str,int begin,int end)
{
if(begin == end)
{
if(find(vec.begin(),vec.end(),str)==vec.end())
vec.push_back(str);
}
else
{
for(int j=begin;j<=end;j++)
{
swap(str[j], str[begin]);
PermutationHelp(str,begin+1,end);
swap(str[j], str[begin]);
}
}
}
};