题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串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;
}


京公网安备 11010502036488号