問題:
? ? ? ?輸入一個字符串,按字典序打印出該字符串中字符的所有排列粉渠。例如輸入字符串a(chǎn)bc,則打印出由字符a,b,c所能排列出來的所有字符串a(chǎn)bc,acb,bac,bca,cab和cba并鸵。
分析如下:
? ? ? ? ? ?全排列算法的本質(zhì)思想為將第i個元素和后面的每個元素交換位置项郊,迭代進(jìn)行下去滩愁,并去掉重復(fù)的吗垮,即可得到結(jié)果问裕。
代碼如下:
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;
}
}
結(jié)果如下:
輸入:abc
輸出:[abc, acb, bac, bca, cab, cba]