全排列算法

问题:

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,877评论 18 399
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,794评论 0 33
  • 今天面试一家公司,因为简历上写了ACM经历,被问到了PHP字符串全排列算法,当时时间有限只给了思路,回家后把它实现...
    灵魂放逐阅读 1,675评论 0 0
  • 夜莺与猫阅读 282评论 0 0
  • 【感悟】 1.从普通员工逐步升级到经理、总监、总裁的方法论:1)要非常清楚上一个职级的能力、素质、经验要求,才能有...
    1军哥嘹亮阅读 463评论 0 1