输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
思路:将所有字符都先放到第一位置上,在让后面的继续排列,用到递归的思想
实现:C++
class Solution {
public:
vector<string> slist;
vector<string> Permutation(string str) {
if(str.length()==0)
{
return slist;
}
int len = str.length();
Permutation(slist,str,0,len);
return slist;
}
void Permutation(vector<string> &v,string str,int index,int len)
{
//当索引指向最后一个字符时,将str存入v中
if(index==len)
{
v.push_back(str);
return;
}
for(int i=index;i<len;i++)
{
//保证输入重复字符时,不会重复计算
if(i!=index&&str[i]==str[index])
{
continue;
}
swap(str[i],str[index]);//使每个元素都有机会放在index位,后面继续排列
Permutation(v,str,index+1,len);
}
}
};
finished!!!