难度中等
输入一个字符串,打印出该字符串中字符的所有排列。
你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。
思路:
递归遍历全部的组合可能,将全部的结果放入 set 中,再重组 set 返回结果。
代码:
class Solution {
vector<string> ans;
set<string> res;
int len=0;
string cur = "";
string s = "";
public:
vector<string> permutation(string s) {
this->s = s;
this->len=s.size();
vector<int> flg(len,0);
findAns(flg);
return vector<string> (res.begin(),res.end());
}
void findAns(vector<int> flg){
if(cur.size() == len) {res.insert(cur); return;}
for(int i=0;i<len;++i){
if(flg[i]) continue;
flg[i] = 1;
cur+=s[i];
findAns(flg);
flg[i] = 0;
cur.pop_back();
}
}
};