字符全排列java版

文章目录


一、全排列是什么?

从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;//不要忘了咯,最后的返回    }}


版权声明:本文为lcarus008原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。