0
点赞
收藏
分享

微信扫一扫

全排列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);
    }
    static public void dsf(int step){
        if(step==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
                check[i]=1;//标记已用
                dsf(step+1);//进行下一次
                check[i]=0;//
            }
        }
        return;//不要忘了咯,最后的返回
    }


}

举报

相关推荐

0 条评论