【剑指offer】字符串的排列
题目链接:字符串的排列
题意:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
题解:递归。每次把首位字符变一下。固定这个字符,做它的全排列。后面的字符也是一样,固定,再全排列。递归到,最后一个字符和第一个字符交换完成为止。
代码:
1 class Solution { 2 public: 3 vector<string> ans; 4 vector<string> Permutation(string str) { 5 int len = str.length(); 6 if(len == 0 ) return ans; 7 Permutation(str,0); 8 sort(ans.begin(),ans.end()); 9 return ans; 10 } 11 void Permutation(string str,int begin){ 12 int len = str.length(); 13 if(begin == len){ 14 ans.push_back(str); 15 return ; 16 } 17 for(int i = begin; i < len;i++){ 18 if(i!=begin && str[i] == str[begin]) continue; 19 swap(str[begin],str[i]); 20 Permutation(str,begin+1); 21 } 22 } 23 };