全排列算法

2017-07-15  本文已影响0人  光影墨辰

问题:

       输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串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]

上一篇下一篇

猜你喜欢

热点阅读