【待修改】排列组合

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);
        
        
        
        
    }
}
原文地址:https://www.cnblogs.com/hansongjiang/p/3977955.html