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