1. 程式人生 > >字符串的排列

字符串的排列

bsp pre con backtrace span body itl 大小 ring

題目描述

 輸入一個字符串,按字典序打印出該字符串中字符的所有排列。例如輸入字符串abc,則打印出由字符a,b,c所能排列出來的所有字符串abc,acb,bac,bca,cab和cba。

輸入描述:

輸入一個字符串,長度不超過9(可能有字符重復),字符只包括大小寫字母。

思路:回溯法,排列樹。由於字符有重復,所以要去重;由於要按字典序打印,所以最後要排序
 1 class Solution {
 2 public:
 3     void backtrace(string &str, vector<string> &res, int n)
 4     {
 5         if
(n==str.size()) 6 { 7 res.push_back(str); 8 return; 9 }else{ 10 for(int i=n; i<str.size(); ++i) 11 { 12 if(i!=n && str[i]==str[n])continue;//去重 13 char tmp=str[n];//交換 14 str[n]=str[i];
15 str[i]=tmp; 16 backtrace(str, res, n+1);//遞歸 17 tmp=str[n];//換回來 18 str[n]=str[i]; 19 str[i]=tmp; 20 } 21 } 22 } 23 vector<string> Permutation(string str) { 24 vector<string> res;
25 if(str.size()==0)return res; 26 backtrace(str, res, 0); 27 std::sort(res.begin(), res.end());//排序 28 return res; 29 } 30 };

字符串的排列