回溯(深度优先搜索)。回溯求排列使用了一个标记数组used。最终的结果用set去重。
class Solution {
public:
void dfs(string& str,vector<string>& result,string& path,vector<bool>& used){
if(path.size()==str.size()){
result.push_back(path);
return;
}
for(int i=0;i<str.size();i++){
if(used[i]) continue;
used[i]=true;
path.push_back(str[i]);
dfs(str,result,path,used);
path.pop_back();
used[i]=false;
}
}
vector<string> Permutation(string str) {
vector<string> result{};
string path{};
vector<bool> used(str.size(),false);
dfs(str, result, path, used);
set<string> str_set{result.begin(),result.end()};
vector<string> res{str_set.begin(),str_set.end()};
return res;
}
};