用java把1234各种排序都打印出来,如:1234,1243,1324,1342...(Hint:深度排序算法)。

面试时哪晓得深度什么子的,就直接用Arrays.asList返回的List的remove方法(当然,这是错的;Arrays.asList()返回的List是长度一定的,不能remove,抛出unsupportoperation异常)。上网看了看深度排序算法,终于实现了,现贴上,希望抛砖引玉,大家又什么更好的算法:

public  class  Sorter {
     public  static  void  main(String[] args){
         sort();
     }
 
     public  static  void  sort() {
         StringBuffer str =  new  StringBuffer();
         for ( int  i= 0 ;i< 4 ;i++) {
             int [] intArrays =  new  int []{ 1 2 3 4 };
             str.append(intArrays[i]);
             for ( int  j= 0 ;j< 3 ;j++) {
                 int [] secondArrays = getOthers(intArrays, intArrays[i]);
                 str.append(secondArrays[j]);
                 for ( int  k= 0 ;k< 2 ;k++) {
                     int [] thirdArrays =getOthers(secondArrays, secondArrays[j]);
                     str.append(thirdArrays[k]);
                     str.append(getOthers(thirdArrays, thirdArrays[k])[ 0 ]);
 
                     //找到最深处,打印这种情况
                     System.out.println(str.toString());
                     
                     //清除这种情况的操作,为新的情况准备
                     str.delete( 2 4 );
                 }
 
                 //清除这种情况的操作,为新的情况准备
                 str.delete( 1 2 );
             }
             
             //清除这种情况的操作,为新的情况准备
             str.delete( 0 1 );
         }
     }
     
     /*
     *返回除了me元素的其他元素的数组   
     */
     public  static  int [] getOthers( int [] old,  int  me) {
         int [] arrays =  new  int [old.length -  1 ];
         int  index =  0 ;
         for ( int  i= 0 ;i<old.length;i++) {
             if (old[i] != me) {
                 arrays[index++] = old[i];
             }
         }
         return  arrays;
     }
}

下面是用递归来写的:

package simpleTest;




import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;


public class Test2 {
public static void main(String[] args) {
String[] array = new String[]{"1","2","3"};
listAll(Arrays.asList(array), "");

}
public static void listAll(List candidate,String prefix){
if(candidate.isEmpty())
System.out.println("prefix="+prefix);
for(int i=0;i<candidate.size();i++){
List temp = new LinkedList(candidate);
//System.out.println("i="+i);
//System.out.println("temp="+temp);
listAll(temp,prefix+temp.remove(i));
//System.out.println("templast="+temp);

}
}


}


发布评论
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

2015-07-31 java错题讲解
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。