题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
class Solution {
private:
bool visit[20];
void sortString(vector&p,set&se,string str,string addstr){
int num = 0;
string add;
for(int i = 0; i < str.length(); i++){
if(visit[i]) continue;
add = addstr;
num++;
add+=str[i];
visit[i] = true;
sortString(p, se, str, add);
visit[i] = false;
}
if(num == 1){
if(se.count(add) == 0){
se.insert(add);
p.push_back(add);
}
}
}
public:
vector Permutation(string str) {
vector t;
setse;
string st;
memset(visit, false, sizeof(visit));
sortString(t, se, str, st);
return t;
}
};