题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
思路:1.固定第一个字符,后面的字符全排列。。。
2.固定前两个字符,后面的字符全排列。。。
一直递归下去。
注意 不能用引用,用引用的话,全程只公用一个string
class Solution { public: vector<string> Permutation(string str) { set<string> setres; vector<string> vecres; DFS(setres,str,0,str.size()-1); set<string>::iterator it= setres.begin(); for (; it!=setres.end(); ++it) vecres.push_back(*it); return vecres; } void DFS(set<string>&setres,string str,int begin,int end){ if(begin==end){ setres.insert(str); return; } for (int i = begin; i <=end; ++i) { swap(str[begin],str[i]); DFS(setres,str,begin+1,end); swap(str[begin],str[i]); } } };