class Solution {
public:
void change(string str , size_t index){
if(index == str.length()){
set_.insert(str);
return;
}
for(size_t i = index ; i < str.length() ; i++ ){
char * tmp_buf = (char *) malloc(sizeof(char ) * str.length() + 1);
memset(tmp_buf , 0,sizeof(char ) * str.length() + 1);
memcpy(tmp_buf , str.c_str() , str.length());
char tmp = tmp_buf[index];
tmp_buf[index] = tmp_buf[i];
tmp_buf[i] = tmp;
string tmp_str(tmp_buf);
free (tmp_buf);
change(tmp_str , index + 1);
}
}
vector<string> Permutation(string str) {
vector<string> vec;
if(str.length() == 0) return vec;
change(str , 0 );
for(auto it = set_.begin() ; it != set_.end() ; it++){
vec.push_back(*it);
}
return vec;
}
set <string> set_;
};
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。
主要的递归思路是递归的将第一个字母和后面的字母相调换,最后因为需要排序输出,直接放到了set里面