一、整型数组全排列
示例: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;
}
}