字符串全排列 java实现

原创 2016年06月01日 19:05:19

经常会遇到字符串全排列的问题。例如:输入为{‘a’,’b’,’c’},则其全排列组合为abc,acb,bac,bca,cba,cab。对于输入长度为n的字符串数组,全排列组合为n!种。

思路:从字符串数组中每次选取一个元素,作为结果中的第一个元素。然后,对剩余的元素全排列,步骤跟上面一样。很明显这是个递归处理的过程,一直到最后即可。

按照惯例,talk is cheap,show me the code:

package leilei.bit.edu.tree;

public class RecursionTree {

    public static void permutation(char[] s,int from,int to) {
        if(to <= 1)
            return;
        if(from == to) {
            System.out.println(s);
        } else {
            for(int i=from; i<=to; i++) {
                swap(s,i,from); //交换前缀,使其产生下一个前缀
                permutation(s, from+1, to);
                swap(s,from,i); //将前缀换回,继续做上一个前缀的排列
            }
        }
    }

    public static void swap(char[] s,int i,int j) {
        char tmp = s[i];
        s[i] = s[j];
        s[j] = tmp;
    }

    public static void main(String[] args) {
        char[] s = {'a','b','c'};
        permutation(s, 0, 2);
    }

}

代码运行结果

abc
acb
bac
bca
cba
cab
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

全排列算法(java实现)

全排列算法(java实现)

字符串 全组合

对于一个字符数组,例如[“a”,”b”,”c”],求其全组合形式。结果为[‘a’, ‘b’, ‘ab’, ‘c’, ‘ac’, ‘bc’, ‘abc’]。本博主被问到过这么一个问题。整理了一下解题思路...

生日蜡烛(蓝桥杯)

生日蜡烛 某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。 现在算起来,他一共吹熄了236根蜡烛。 请问,他从多少岁开始过生日party的? ...

STL系列之十 全排列(百度迅雷笔试题)

全排列在笔试面试中很热门,因为它难度适中,既可以考察递归实现,又能进一步考察非递归的实现,便于区分出考生的水平。所以在百度和迅雷的校园招聘以及程序员和软件设计师的考试中都考到了,因此本文对全排列作下总...

全排列算法(java实现)

100题目之53题目和70题目 在做100题目的时候,全排列的算法困扰了很久,虽然网上了搜了一些资料,可是并没有搞懂。今天花了一个下午的时间,从新梳理了一遍,终于弄明白了。 全排列的算法,...

Java实现数组的全排列

今天在做课设任务时间表的时候,算法遇到点问题,有时候有些算法在没有想到的时候可以先用最没效率的方法测试一下,数组的全排列就是其中一种。

【Java算法】快速全排序算法

全排序简介 从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。 如1,2,3三个元素的全排列为:   ...

java实现给定字符串之间的全排列算法

本文章是以《编程之法:面试和算法心得》书籍作为基础,将书籍中的算法使用java语言进行整理,以及个人所列举的计算方法,本文章根据本书中的第一章第三节字符串的全排列进行整理,并且提出了本人平时使用的计算...

java中全排列的生成算法汇总

全排列的生成算法就是对于给定的字符集,用有效的方法将所有可能的全排列无重复无遗漏地枚举出来。任何n个字符集的排列都可以与1~n的n个数字的排列一一对应,   因此在此就以n个数字的排列为例说明排列的生...
  • qfikh
  • qfikh
  • 2016-08-29 09:41
  • 3514

Java实现字符数组全排列

import org.junit.Test; public class AllSort { public void permutation(char[] buf, int start, int ...
  • RO_wsy
  • RO_wsy
  • 2014-05-06 09:36
  • 9287
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)