面试题 08.07. 无重复字符串的排列组合
-
无重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合,字符串每个字符均不相同。
示例1:
输入:S = "qwe"
输出:["qwe", "qew", "wqe", "weq", "ewq", "eqw"]
示例2:
输入:S = "ab"
输出:["ab", "ba"]
递归实现排列形枚举(类似一个所有点和所有点链接的图的遍历)
class Solution {
public:
vector<char> arr;
vector<vector<char>> ans;
void DFS(string &S, vector<int> &used){
if (arr.size() == S.size()){
ans.push_back(arr);
return;
}
//类似一个所有点和所有点链接的图的遍历
for (int i = 0; i < S.size(); i++){
if (used[i] == 1) continue;
arr.push_back(S[i]);
used[i] = 1;
DFS(S, used);
used[i] = 0;
arr.pop_back();
}
}
vector<string> permutation(string S) {
vector<int> used(S.size(), 0);
vector<string> cur;
DFS(S, used);
string s;
for (int i = 0; i < ans.size(); i++) {
for (int j = 0; j < ans[i].size(); j++) {
s.push_back(ans[i][j]);
}
cur.push_back(s);
s.clear();
}
return cur;
}
};