剑指 Offer 38. 字符串的排列
输入一个字符串,打印出该字符串中字符的所有排列。
你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。
示例:
输入:s = "abc"
输出:["abc","acb","bac","bca","cab","cba"]
class Solution {
public:
vector<string> permutation(string s) {
dfs(s, 0);
return res;
}
private:
vector<string> res;
void dfs(string s, int x)
{
if(x==s.size()-1)
{
res.push_back(s);
return;
}
set<int> se;
for(int i =x; i<s.size(); i++)
{
if(se.find(s[i]) != se.end())
continue;
se.insert(s[i]);
swap(s[i], s[x]);
dfs(s, x+1);
swap(s[i], s[x]);
}
}
};