剑指 Offer 38. 字符串的排列
卡神讲解
注意几个点:
- 首先s要排序;
- 掌握好是树层去重,而不是树枝去重!
class Solution {
public:
vector<string> ans;
string path;
vector<string> permutation(string s) {
sort(s.begin(), s.end());
vector<bool> used(s.size(), false);
dfs(s, used);
return ans;
}
void dfs(string s, vector<bool> used){
if(path.length() == s.length()){
ans.push_back(path);
return ;
}
for(int i = 0; i < s.length(); i++){
if(i > 0 && s[i] == s[i - 1] && used[i - 1] == false) continue;
if(used[i] == false){
used[i] = true;
path.push_back(s[i]);
dfs(s, used);
used[i] = false;
path.pop_back();
}
}
}
};