Java实现全排列


一、整型数组全排列

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、字符串的全排列

题目描述

给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。 我们假设对于小写字母有’a’ < ‘b’ < … < ‘y’ < ‘z’,而且给定的字符串中的字母已经按照从小到大的顺序排列。

输入描述

输入只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在1到6之间。

输出描述

输出这个字符串的所有排列方式,每行一个排列。要求字母序比较小的排列在前面。字母序如下定义:
已知S = s1s2…sk , T = t1t2…tk,则S < T 等价于,存在p (1 <= p <= k),使得s1 = t1, s2 = t2, …, sp - 1 = tp - 1, sp < tp成立。

每组样例输出结束后要再输出一个回车。

代码:

public class Main{
    static Scanner sc=new Scanner(System.in);
    static final int N=101;
    static char []a;
    public static void main(String []args) {
        a=sc.next().toCharArray();
        Arrays.sort(a);//自动排序。
        permute(a,0,a.length-1);
    }

    /**
     * 对数组a的[start,end]区间做全排列
     * @param a 要做全排列的数组
     * @param start 做全排列时的起始地址
     * @param end 做全排列时的尾部位置
     */
    static void permute(char[] a,int start,int end){
        if(start==end) {//当参与全排列的只有一个元素时,结束整个函数。
            System.out.println(a);
            return;
        }
        for(int i=start;i<=end;i++){
            swap(start,i);//将每个元素都和第start个元素进行交换。
            permute(a,start+1,end);//对剩下部分继续进行全排列
            swapback(start,i);//还原
        }
    }
    static void swap(int x,int y){
        char c=a[y];
        for(int i=y;i>x;i--){
            a[i]=a[i-1];
        }
        a[x]=c;
    }
    static void swapback(int x,int y){
        char c=a[x];
        for(int i=x;i<y;i++){
            a[i]=a[i+1];
        }
        a[y]=c;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值