题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
思路:http://blog.csdn.net/wangdd_199326/article/details/60149133
直接很逗比。。。居然写出如下的代码。。。。心好累。。。。
class Solution { public: vector<string> Permutation(string str) { sort(str.begin(),str.end()); do { return str; }while(next_permutation(str.begin(),str.end())); } };
改写了一下,成功。
class Solution { public: vector<string> Permutation(string str) { vector<string> a; if(str.size()==0) return a; sort(str.begin(),str.end()); do { a.push_back(str); }while(next_permutation(str.begin(),str.end())); return a; } };
class Solution { public: vector<string> Permutation(string str) { if(str!="") dfs(str,0); return ret; } private: vector<string> ret; void dfs(string str,int s) { if(s==str.size()) { ret.push_back(str); return ; } for(int i=s;i<str.size();i++) { if(i!=s &&str[s]==str[i]) continue; swap(str[s],str[i]); dfs(str,s+1); } } };
class Solution { public: set<string> res; void fun(string str, int pos) { if (pos == str.length()) { res.insert(str); return; } for (int i = pos; i < str.length(); ++i) { swap(str[i], str[pos]); fun(str, pos + 1); swap(str[i], str[pos]); } } vector<string> Permutation(string str) { res.clear(); vector<string> st; if (str.length() == 0)return st; fun(str, 0); set<string>::iterator it; for (it = res.begin(); it != res.end(); ++it) st.push_back(*it); return st; } }