文章目录
一、全排列是什么?
从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。
也就是不重复的组合出全部的可能性。
公式:全排列数f(n)=n!(定义0!=1)
二、java代码
解释:用于一切字符的全排列
import java.util.Scanner;public class 全排列 {
static Scanner scanner=new Scanner(System.in);
static String string=scanner.next(); //输入要进行全排列的字符
static char aChar[]=new char[string.length()];
static int check[]=new int[string.length()];
public static void main(String[] args) {
dsf(0); //从下标0开始
}
static public void dsf(int step){
if(step==string.length()){
//当凑够需要长度时输出,这里长度正好设置为等于总长string.length(),小于时需要修改设置这里
//(不能大于)
System.out.println(String.valueOf(aChar));
//将char类型全部转为string类型输出,切记不要用tostring,tostring未重写前都是地址值
return;//返回,吐出此时的位置,并返回到上一个递归选择处 }
for (int i=0;i<string.length();i++){
//for循环遍历到全部的组合数的个数(因为这样才能使每次递归时排列检查到每个),即'string'的长度
if(check[i]==0){
//用来检测或者说标记是否用过,全排列不能重复使用
aChar[step]=string.charAt(i);
//将新装的数放进achar数组,用于凑够后的输出,注意是用achar【step】在step的位置装,
//而非i,因为i是被装数的下标,而step才是此时需要装凑的数的位置
check[i]=1;//标记已用
dsf(step+1);//进行下一次
check[i]=0;//
}
}
return;//不要忘了咯,最后的返回 }}