字符串的排列
阿新 • • 發佈:2017-12-26
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 };
字符串的排列