输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。按字典序打印出该字符串中字符的所有排列。
class Solution {
public:
vector<string> v;
int leng = 0;
void buildString(string s,char c[],int len,bool flag[]){
if(len == leng){
for(int i = 0; i < v.size(); i++)
if(s == v[i])
return;
v.push_back(s);
return;
}
for(int i = 0; i < leng; i++){
if(flag[i])
continue;
flag[i] = true;
s += c[i];
buildString(s,c,len+1,flag);
flag[i] = false;
s = s.substr(0,s.length()-1);
}
}
vector<string> Permutation(string str) {
if(str.length() == 0)
return v;
char c[10];
c[0] = str[0];
leng = str.length();
for(int i = 1; i < str.length(); i++){
int j = i - 1;
for(; j >= 0; j--){
if(c[j] < str[i]){
c[j+1] = str[i];
break;
}else{
c[j+1] = c[j];
}
}
if(j < 0)
c[0] = str[i];
}
string s = "";
bool flag[str.length()];
for(int i = 0; i < str.length(); i++)
flag[i] = false;
buildString(s,c,0,flag);
return v;
}
};