美文网首页
全排列算法

全排列算法

作者: 光影墨辰 | 来源:发表于2017-07-15 17:26 被阅读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]

    相关文章

      网友评论

          本文标题:全排列算法

          本文链接:https://www.haomeiwen.com/subject/pghzhxtx.html