面试时哪晓得深度什么子的,就直接用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);
}
}
}