字符串排列
题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
class Solution { public: void Permuta(vector<string>& result,string str,int start,int len){ if(start == len){ result.push_back(str); }else{ for(int i = start;i<=len;i++){ bool sgn = true; int index = i; if(index == start) sgn =true; else{ while(--index>=start){ if(str[index]==str[i]) sgn = false; } } if(sgn){ swap(str[i],str[start]); Permuta(result,str,start+1,len); swap(str[i],str[start]); } } } } vector<string> Permutation(string str) { int len = str.size(); vector<string> result; if(len == 0) return result; Permuta(result,str,0,len-1); sort(result.begin(),result.end()); return result; } };
注意的是:如果这个元素出现过那么交换没意义,无论它是和基准元素一样还是和以前被交换过得元素一样!!!!!!