//输入一个字符串,打印出该字符串中字符的所有排列。
//
//
//
// 你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。
//
//
//
// 示例:
//
// 输入:s = "abc"
//输出:["abc","acb","bac","bca","cab","cba"]
//
//
//
//
// 限制:
//
// 1 <= s 的长度 <= 8
// Related Topics 回溯算法
// 👍 183 👎 0
/*
* 剑指 Offer 38 字符串的排列
* 2021-02-18 11:40:19
* @author oxygenbytes
*/
#include "leetcode.h"
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public:
set<string> se;
vector<string> permutation(string s) {
vector<bool> vis(s.size(), false);
string cur;
dfs(s, vis, cur);
vector<string> res;
for(auto it = se.begin();it != se.end();it++) res.push_back(*it);
return res;
}
void dfs(string& str, vector<bool>& vis, string& cur){
if(cur.size() == str.size()){
se.insert(cur);
return ;
}
for(int i = 0;i < str.size();i++){
if(!vis[i]){
string temp = cur;
cur += str[i];
vis[i] = true;
dfs(str, vis, cur);
vis[i] = false;
cur = temp;
}
}
}
};
//leetcode submit region end(Prohibit modification and deletion)