[剑指Offer] 27.字符串的排列
【思路】从第一位开始,判断每一位字符的所有可能性,依此递归。
1 class Solution 2 { 3 public: 4 void PermutationHelp(vector<string> &ans, int k, string str) //遍历第k位的所有可能 5 { 6 if(k == str.length() - 1) 7 ans.push_back(str); 8 set<char> S;//记录出现过的字符 9 sort(str.begin() + k, str.end());//保证按字典序输出 10 for(int i = k; i < str.length(); i++) 11 { 12 if(S.find(str[i]) == S.end()) //只和没交换过的换 13 { 14 S.insert(str[i]); 15 swap(str[i], str[k]); 16 PermutationHelp(ans, k + 1, str); 17 swap(str[i], str[k]);//复位 18 } 19 } 20 } 21 vector<string> Permutation(string str) 22 { 23 vector<string> ans; 24 PermutationHelp(ans, 0, str); 25 return ans; 26 } 27 };