packagecom.heyang.p122345;importjava.util.HashSet;importjava.util.Set;/*** 用1、2、2、3、4、5这六个数字,用java写一个程序,打印出所有不同的排列,如:512234、412345等,
* 要求:"4"不能在第三位,"3"与"5"不能相连。
* 说明: 以下为全排列做法
* 作者:heyang(heyang78@gmail.com)
* 创建时间:2010-6-22 上午12:46:37
* 修改时间:2010-6-22 上午12:46:37*/publicclassPermutation{//用于序号privatestaticintindex=1;//用于清除重复的数,因为有两个2的影响privatestaticSetset=newHashSet();publicstaticvoidmain(String[] args){
Integer[] arr02={1,2,2,3,4,5};//Integer[] arr02={1,2,2};permutation(arr02,0,arr02.length);
}/*** 排列函数
*
* 说明:
*@paramarr
*@paramstart
*@paramend
* 创建时间:2010-6-22 上午02:05:12
* 修改时间:2010-6-22 上午02:05:12*/publicstaticvoidpermutation(Integer[] arr,intstart,intend){if(start
permutation(arr,start+1,end);for(inti=start+1;i
Integer temp;
temp=arr[start];
arr[start]=arr[i];
arr[i]=temp;
permutation(arr,start+1,end);
temp=arr[i];
arr[i]=arr[start];
arr[start]=temp;
}
}else{
print(arr);
}
}/*** 打印函数
*
* 说明:
*@paramarr
* 创建时间:2010-6-22 上午02:05:27
* 修改时间:2010-6-22 上午02:05:27*/privatestaticvoidprint(Integer[] arr){//"4"不能在第三位if(arr[2]==4){return;
}
StringBuilder sb=newStringBuilder();for(inti=0;i
sb.append(arr[i]);
}
String word=sb.toString();//"3"与"5"不能相连if(word.contains("35")||word.contains("53")){return;
}//打印if(set.contains(word)==false){
System.out.println((index++)+""+word);
set.add(word);
}
}
}