思路1:使用DFS遍历字符串,进行字符交换,每次都先和自己交换,然后再和后面的字符依次交换,通过for循环来将已经处理过的字符排除掉(即下标往后移动)
class Solution {
public:
void DFS(int h, string s, set<string>& ans)
{
if(h==s.size())
{
ans.insert(s);
return ;
}
for(int i=h;i<s.size();i++)
{
swap(s[i], s[h]);
DFS(h+1, s, ans);
}
}
vector<string> Permutation(string str) {
vector<string> myvector;
if(str.size()==0)
return myvector;
set<string> ans;
DFS(0, str, ans);
vector<string> result(ans.begin(), ans.end());
return result;
}
};