思路:因为字符之间互不相同,故使用全排列的方式去解题;
字符串长度为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]);}}}
};