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);
}
}