深度优先搜索
class Solution {
public:
vector<string> permutation(string s) {
vector<string> res;
dfs(res,s,0);
return res;
}
void dfs(vector<string> &res,string &s,int pos){
if(pos == s.size()){
//cout;
res.push_back(s);
}
for(int i=pos;i<s.size();i++){
bool flag = true;
for(int j = pos;j<i;j++)//字母相同时,等效,剪枝
{
if(s[j] == s[i] flag = false;
}
if(flag){
swap(s[pos],s[i]);// 交换,将 s[i] 固定在第 x 位
dfs(res,s,pos+1); // 开启固定第 x + 1 位字符
swap(s[pos],s[i]);// 恢复交换
}
}
}
};
这种方法不太好理解 看后一篇总结