28 字符串的排列

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。


输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。

 

C++:

 1 class Solution {
 2 private:
 3     vector<string> res ;
 4 public:
 5     vector<string> Permutation(string str) {
 6         if (str.empty())
 7             return res ;
 8         sort(str.begin() , str.end()) ;
 9         bool isUsed[15]  = {false};
10         string temp = "" ;
11         backtracking(str,isUsed,temp) ;
12         return res ;
13     }
14     
15     void backtracking(string str , bool isUsed[] , string temp){
16         if (temp.size() == str.size()){
17             res.push_back(temp) ;
18             return ;
19         }
20         for(int i = 0 ; i < str.size() ; i++){
21             if (isUsed[i])
22                 continue ;
23             //处理重复字符  比如两个bac1c2  bac2c1 只算其中一种
24             if (i!=0 && str[i] == str[i-1] && !isUsed[i-1])
25                 continue ;
26             isUsed[i] = true ;
27             temp += str[i] ;
28             backtracking(str,isUsed,temp) ;
29             temp.pop_back();
30             isUsed[i] = false ;
31         }
32     }
33 };

 

posted @ 2018-05-04 17:29  __Meng  阅读(154)  评论(0编辑  收藏  举报