【待修改】排列组合

package 再次开始;

import java.util.ArrayList;

import java.util.LinkedList;

import java.util.List;

import java.util.Queue;

public class 排列 {

    //输出全排列

    public static void pailie(char a[],int lev)

    {

        if(lev==a.length)

        {

            for(int i=0;i<a.length;i++)

            {

                System.out.print(a[i]);

            }

            System.out.println();

        }

        else

        {

            for(int j=lev;j<a.length;j++)

            {

                swap(a,lev,j);

                pailie(a,lev+1);

                swap(a,lev,j);

                

            }

            

            

            

        }

        

        

        

    }

     public static void perm2(char a[],int lev)

        {

            if(lev==a.length)

            {

                for(int i=0;i<a.length;i++)

                {

                    System.out.print(a[i]);

                    

                }

                System.out.println();

               

            }

            else

            {

                boolean tf=true;

                for(int j=lev;j<a.length;j++)

                {

                    //对于重复的数据不再交换

                    for(int k=lev;k<j;k++)

                    {

                        if(a[k]==a[j])

                        {

                            tf=false;

                            break;

                        }

                    }

                    

                    if(tf)

                    {

                    swap(a,lev,j);

                    perm2(a, lev+1);

                    swap(a,lev,j);

                    }

                }

                    

                    

                    

                

                

                

            }

        }

            

            

    public static void pailie2(char a[],int lev)

    {

        if(lev==a.length)

        {

            for(int i=0;i<a.length;i++)

            {

                System.out.print(a[i]);

            }

            System.out.println();

        }

        else

        {

            for(int j=lev;j<=a.length-1;j++)

            {

                

                if(hasCommon(a,lev,j))

                {

                swap(a,lev,j);

                pailie(a,lev+1);

                swap(a,lev,j);

                }

                

            }

            

            

            

        }

        

        

        

    }

    private static boolean hasCommon(char[] a, int lev, int j) {

        // TODO Auto-generated method stub

        for(int i=lev;i<j;i++)

        {

            if(a[j]==a[i]) return false; //存在相等的,不交换

            

            

        }

        return true; //不存在向相等的交换

    }

    private static void swap(char[] a, int lev, int j) {

        char t=a[lev];

         a[lev]=a[j];

         a[j]=t;

        

        

    }

    public static void main(String args[]){

        char chs[]={'1','2','2'};

        System.out.println("排列1");

        pailie(chs, 0);

        System.out.println("排列2");

        perm2(chs,0);

        

        

        

        

    }

}

 

你可能感兴趣的:(组合)