1.递归的写法有一步写错了,看了评论区老哥的答案恍然大悟,传的是 + 不是 +=
class Solution {
public:
//递归终止条件等于字符的长度
void dfs(string s,string t,vector<bool>&visit,unordered_set<string>&list){
if(t.length()==s.length()){
list.insert(t);
return;
}
for(int i=0;i<s.length();i++){
if(visit[i]){
continue;
}
visit[i]=true;
dfs(s,t+s[i],visit,list); //t+s[i],不是+=
visit[i]=false;
}
}
vector<string> permutation(string s) {
vector<bool> visit(s.length(),false);
unordered_set<string> list;
vector<string> ans;
dfs(s,"",visit,list);
for(auto x:list){
//cout<<x<<endl;
ans.push_back(x);
}
return ans;
}
};
2.回溯法
参考:剑指 Offer 38. 字符串的排列(回溯法,清晰图解)
set和unordered_set的区别复习:c++ set unordered_set区别