#include<iostream>
#include<vector>
#include<string>
#include <algorithm>
using namespace std;
class Solution {
public:
vector<string> ans;
string temp;
void backtrack(string& s, vector<bool>& used){
if (temp.length()==s.length()){
ans.emplace_back(temp);
return ;
}
for (int i=0; i<s.length(); i++){
if (i>0 && s[i]==s[i-1] && used[i-1]==false) continue;
if (used[i]==false){
used[i]=true;
temp.push_back(s[i]);
backtrack(s,used);
temp.pop_back();
used[i]=false;
}
}
}
vector<string> permutation(string s) {
vector<bool> used(s.length(), false);
sort(s.begin(), s.end());
backtrack(s, used);
return ans;
}
};
int main(){
vector<string> ans;
string s="abs", temp;
Solution S;
ans=S.permutation(s);
for (int j=0; j<ans.size(); j++){
temp=ans[j];
for (int i=0; i<temp.length(); i++){
cout<<temp[i];
}
cout<<endl;
}
return 0;
}
结果:
abs
asb
bas
bsa
sab
sba
Leetcode剑指offer38. 字符串的排列--回溯算法
最新推荐文章于 2022-10-13 21:27:23 发布