解法一
回溯法DFS
class Solution {
public:
vector<string> permutation(string s) {
dfs(s,0);
return res;
}
private:
vector<string> res;
void dfs(string s, int x){//第x位字符
if(x==s.size()-1){
res.push_back(s);//添加排队方案
return;
}
set<int> st;
for (int i = x; i < s.size(); i++)
{
if(st.find(s[i])!=st.end()) continue;//set与map类似,重复时剪枝
st.insert(s[i]);
swap(s[i],s[x]);// 交换,将 s[i] 固定在第 x 位
dfs(s,x+1);//固定x+1位
swap(s[i],s[x]);
}
}
};