使用循环递归算法:
public class Test {
public static void main(String[] args){
String[] array = new String[]{
"1","2","3","4"
};
listAll(Arrays.asList(array),"");
}
private static void listAll(List asList, String string) {
// TODO Auto-generated method stub
if(asList.isEmpty()){
System.out.println(string);
}
for (int i = 0; i < asList.size(); i++) {
List temp = new LinkedList(asList);
listAll(temp, string+temp.remove(i));
}
}
}
这个方法十分巧妙啊,在for循环中将arraylist转换成一个linkedlist对象,双向链表非常方便的可以在指定的位置删除对象temp.remove(i)的返回值就是在temp中被移走的那个数,同时调用这个方法也就可以在temp中将这个数移走,通过for循环中的i值控制被移走的是哪个数。每被移走一个数就存放在string中,当list中的书被移完时就输出一次。多次递归调用得到最终答案。