- importjava.util.ArrayList;
- importjava.util.List;
- importjava.util.Set;
- importjava.util.TreeSet;
- /**
- *
- *@author赵学庆www.java2000.net //摘录此人的作品
- *
- */
- publicclassT{
- publicstaticList<String>find(List<String>list){
- List<String>rtn=newArrayList<String>();
- Stringstr;
- for(inti=0;i<list.size();i++){
- str=list.get(i);
- list.remove(i);
- if(list.size()==0){
- rtn.add(str);
- }else{
- List<String>sList=find(list);
- for(Strings:sList){
- rtn.add(str+s);
- if(s.length()==5){
- addNumber(str+s);
- }
- }
- }
- list.add(i,str);
- }
- returnrtn;
- }
- publicstaticvoidaddNumber(Stringstr){
- if(str.charAt(2)=='4'||str.contains("35")||str.contains("53")){
- return;
- }
- set.add(str);
- }
- publicstaticSet<String>set=newTreeSet<String>();
- publicstaticvoidmain(String[]args){
- List<String>list=newArrayList<String>();
- list.add("1");
- list.add("2");
- list.add("2");
- list.add("3");
- list.add("4");
- list.add("5");
- find(list);
- System.out.println(set.size());
- intcols=10;
- for(Strings:set){
- System.out.print(s+"");
- if(cols--==1){
- System.out.println();
- cols=10;
- }
- }
- }
- }
网友提供的一个比较优化的算法
- importjava.util.Set;
- importjava.util.TreeSet
- /**
- *原始版本没有考虑重复问题,我进行了修正.<br>
- *此算法的精华就是,让一个字符串的所有位置都进行互换,<br>
- *这样就产生了所有可能出现的字符串。
- *
- *@author赵学庆,nicky_zs<ahref="http://www.java2000.net">www.java2000.net</a>
- */
- publicclassMyTest{
- publicstaticvoidmain(Stringargs[]){
- char[]number=newchar[]{'1','2','2','3','4','5'};
- perm(number,0,number.length-1);
- System.out.println(set.size());
- intcols=10;
- for(Strings:set){
- System.out.print(s+"");
- if(cols--==1){
- System.out.println();
- cols=10;
- }
- }
- }
- publicstaticvoidaddNumber(Stringstr){
- set.add(str);
- }
- publicstaticSet<String>set=newTreeSet<String>();
- publicstaticvoidperm(char[]n,intbeg,intend){
- if(beg==end){
- Stringresult=String.valueOf(n);
- if(n[2]=='4')
- return;
- if(result.contains("35")||result.contains("53"))
- return;
- addNumber(String.valueOf(n));
- return;
- }
- for(inti=beg;i<=end;++i){
- swap(n,beg,i);
- perm(n,beg+1,end);
- swap(n,beg,i);
- }
- }
- publicstaticintnumber=0;
- publicstaticvoidswap(char[]n,inta,intb){
- chartemp=n[a];
- n[a]=n[b];
- n[b]=temp;
- }
- }