输入一个字符串,打印出该字符串中字符的所有排列。
你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。
示例:
输入:s = "abc"
输出:["abc","acb","bac","bca","cab","cba"]
//深度优先搜索
class Solution {
public:
vector<string>v;
vector<string> permutation(string s) {
dfs(0,s);
return v;
}
void dfs(int step,string s){ //固定某一位,然后用固定位置后面的字符与固定位置的字符进行交换
if(step==s.size()-1){
v.push_back(s);
return;
}
//set<char>se;
int book[155];
memset(book,0,sizeof(book));
for(int i=step;i<s.size();i++){
// if(se.find(s[i]) != se.end()) continue;
// se.insert(s[i]);
if(book[s[i]-'a']==1) continue; //剪枝
book[s[i]-'a']=1;
swap(s[step],s[i]);
dfs(step+1,s); //固定下一位
swap(s[step],s[i]);
}
}
};