题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
回溯过程
解决方法
class Solution {
public:
vector<string> res;
vector<string> Permutation(string str) {
//回溯。注:回溯是一种算法思想,可以用递归实现
if(str.size()==0) return res;
permute(str,0);
sort(res.begin(),res.end());//按字典序输出
return res;
}
void permute(string s,int begin){//begin指向当前执行排列操作的字符串的第一个字符
if(begin==s.size()) res.push_back(s);
else{
for(int i=begin;i<s.size();i++){
if(i!=begin && s[i]==s[begin]) continue;//去重
swap(s[begin],s[i]);
permute(s,begin+1);
swap(s[begin],s[i]);
}
}
}
};