【剑指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 };

 

posted @ 2020-03-03 22:42  甜酒果。  阅读(166)  评论(0编辑  收藏  举报