38.字符串的排列 (Medium)*
题目描述*
输入一个字符串,打印出该字符串中字符的所有排列。
你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。
限制*
1 <= s 的长度 <= 8
代码*
回溯的全排列问题,先排序然后去重。
class Solution {
private:
vector<string> res;
void backtrack(string s, int i) {
if(i == s.length() - 1) {
res.push_back(s);
return;
}
for(int j = i; j < s.length(); j++) {
if(i != j && s[i] == s[j]) {
continue;
}
swap(s[i], s[j]);
backtrack(s, i + 1);
}
}
public:
vector<string> permutation(string s) {
sort(s.begin(), s.end());
backtrack(s, 0);
return res;
}
};
最后更新: July 23, 2022