全排列算法
问题:
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
分析如下:
全排列算法的本质思想为将第i个元素和后面的每个元素交换位置,迭代进行下去,并去掉重复的,即可得到结果。
代码如下:
publicclassSolution {
publicArrayList Permutation(String str)
{
StringBuilder tx=newStringBuilder();
for(inti =0;i
{
chart1 = str.charAt(i);
if(t1>='a'&&t1<='z'||t1>='A'&&t1<='Z')
{
tx.append(t1);
}
}
charaim[] = tx.toString().toCharArray();
HashSet mySet =newHashSet();
if(aim.length==0)
returnnewArrayList();
deal(aim,0,mySet);
ArrayList list =newArrayList<>(mySet);
Collections.sort(list);
returnlist;
}
publicstaticvoiddeal(char[] aim,intindex,HashSet set)
{
if(index > aim.length)
return;
if(index == aim.length)
{
set.add(newString(aim));
}
for(inti =index;i
{
swap(aim, index, i);
deal(aim, index+1,set);
swap(aim, index, i);
}
}
publicstaticvoidswap(char[] aim,inti,intj)
{
chart = aim[i];
aim[i] =aim[j];
aim[j] = t;
}
}
结果如下:
输入:abc
输出:[abc, acb, bac, bca, cab, cba]