题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
解题思路
class Solution {
public:
//回溯法
vector<string> Permutation(string str) {
vector<string> result;
//空字符串直接返回result
if(str.size()==0)
return result;
//用一个集合进行存储,避免重复,同时默认排好序了
set<string> res;
Permutation(str,res,0);
//将集合中的元素依次加入result
for(auto &e:res)
result.push_back(e);
return result;
}
void Permutation(string str, set<string>& res, int begin)
{
//递归结束条件:索引已经指向str最后一个元素时
if(begin==str.size()-1)
res.insert(str);
else
{
for(int i=begin;i<str.size();i++)
{
//依次进行交换
swap(str[begin],str[i]);
Permutation(str,res,begin+1);
//复位
swap(str[begin],str[i]);
}
}
}
//交换两个字符
void swap(char& first,char& second)
{
char t = first;
first = second;
second = t;
}
};
京公网安备 11010502036488号