题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
解法
//解法:回溯法 // 时间O(n*n!) 空间O(1) //从pos..n的排列 void dfs(string & str, int pos, set<string> & ans) { if (pos == str.size() - 1) { ans.insert(str); return; } for (int i = pos; i < str.size(); i++) { //在pos位置,可以尝试所有未被排列的数字. swap(str[pos], str[i]); dfs(str, pos + 1, ans); swap(str[pos], str[i]); } } vector<string> Permutation(string str) { if (str.empty()) return {}; set<string> ans; dfs(str, 0, ans); vector<string> ansVec(ans.begin(), ans.end()); sort(ansVec.begin(), ansVec.end()); return ansVec; }