一、字符的全排列
题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
/*
递归法:先固定第一个字符,求剩余字符的排列
递归出口:str中只剩下最后一个字符
如果字符串中有重复的字符串,如abb,按照该方法得出的6种解决方案会出现3个重复
将去重的步骤加在交换之前,每个数分别与它后面的非重复出现的数字交换
*/
class Solution {
public:
vector<string> Permutation(string str) {
vector<string>a;
if(str.size()==0)
return a;
Permutation(a,str,0);
sort(a.begin(),a.end());
return a;
}
void Permutation(vector<string>& a,string str,int begin){
//递归出口,将元素压入栈
if(begin==str.size()-1)
a.push_back(str);
for(int i=begin;i<str.size();i++){
//当元素重复,则不交换
if(i