思路:因为字符之间互不相同,故使用全排列的方式去解题;
字符串长度为n
,将第一个字母分别与后面每一个字母进行交换,生成n
种不同的全排列;再用第二个元素与后面每一个元素进行交换,生成n - 1
种不同的全排列……
class Solution {
public:
//存放结果
vector<string> res;
vector<string> permutation(string S) {
//进行深度遍历
dfs(S,0);
return res;
}
void dfs(string &s,int i){
//如果当前的字符串长度够了,则push进结果中
if(i == s.length()) res.push_back(s);
else{
//从i位置开始进行交换生成新的字符串,当前自己交换也就包含了S本身
for(int j = i;j < s.length();j++){
//交换i位置和j位置的字符
swap(s[i],s[j]);
//进行深度优先搜索
dfs(s,i+1);
//再交换回来
swap(s[i],s[j]);
}
}
}
};