字符串排列
程序员文章站
2022-07-12 09:07:51
...
1、描述
输入一个字符串,打印出该字符串中字符的所有排列。
你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。
示例:
输入:s = “abc”
输出:[“abc”,“acb”,“bac”,“bca”,“cab”,“cba”]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zi-fu-chuan-de-pai-lie-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2、关键字
姐妹篇
排列
可有重复字符:
3、思路
和上次那个题一样,使用回溯算法搞定全排列之后,再去重一下
4、notes
回溯算法的框架
5、复杂度
时间:O(n×n!)
空间:O(n)
6、code
class Solution {
public:
vector<string> res;
vector<string> permutation(string s) {
vector<string> res2;
int n = s.size();
vector<bool>flag(n,true);
string track;
traceback(track, s, flag);
sort(res.begin(),res.end());
for(auto elem : res){
if(res2.empty() || res2.back() != elem){
res2.push_back(elem);
}
}
return res2;
}
void traceback(string &track,string & s, vector<bool> & flag ){
if(track.size() == s.size()){
res.push_back(track);
return ;
}
for(int i = 0; i < s.size(); i++){
if(flag[i]){
track +=s[i];
flag[i] = false;
traceback(track,s,flag);
track.pop_back();
flag[i] = true;
}
}
}
};
上一篇: 字符串的排列(全排列)
下一篇: 计蒜客题目 加减乘除