题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
解法一:
C++中本身有全排列的函数 next_permutation()
头文件<algorithm>
函数原型: bool next_permutation(iterator start,iterator end)
函数next_permutation()是本身就是按照字典序产生排列的,也不需要重新排序,直接返回就行。next_permutation() 函数其他用法可参考:
这里
class Solution {
public:
vector<string> Permutation(string str) {
vector<string> res;
if(str.size() == 0)
return res;
do{
res.push_back(str);
}while(next_permutation(str.begin(), str.end()));
return res;
}
};
解法二:
递归
我们可以把目标串理解成两部分:
- 第一部分:以哪个字符开头
- 第二部分:剩下的是子问题
我们要让每个字符都要做一遍开头,然后在求解子问题