public:
set<string>ret;//用set来去重
void dfs(string str,int k){//全排列
if(k==str.size()){
ret.insert(str);
}
// for循环和swap的含义:对于“ABC”,
// 第一次'A' 与 'A'交换,字符串为"ABC", k为0, 相当于固定'A'
// 第二次'A' 与 'B'交换,字符串为"BAC", k为0, 相当于固定'B'
// 第三次'A' 与 'C'交换,字符串为"CBA", k为0, 相当于固定'C'
for(int i=k;i<str.size();i++){
swap(str[k],str[i]);
dfs(str,k+1);
swap(str[k],str[i]);//回溯
}
}
vector<string> Permutation(string str) {
dfs(str,0);
//ret放到vector中
return vector<string>({ret.begin(),ret.end()});
}
};