题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
这道题是剑指offfer中一道经典的题,如果有n个元素,我们就能有n*(n - 1)个全排列,n为1时,只有一个全排列
举个栗子,当字符串为ABC时,分析一下全排列的过程:
1.固定A在字符串的最左边,然后全排列B和C
2.全排列B和C
3.当全排列的字符串只有一个字符时,它的全排列就是它自身
4.当固定A后,其他字符串的全排列完毕后,把A与其他字符进行交换,然后重复上面的步骤进行全排列
示意图如下:
基于这种思路,我使用回溯法解决,代码如下:
class Solution {
public:
vector<string> Permutation(string str) {
vector<string> ret;
if (str.empty()) {
return ret;
}
string tmp = "&