@Test
public void listAllTest() {
List<Integer> array = Arrays.asList(1, 2, 3);
listAll(array, "");
System.out.println("*******************");
listAllNoDirection(array, "", 0);
}
/**
* 含重复
* @param array
* @param prefix
*/
public void listAll(List<Integer> array, String prefix) {
System.out.println("fn(" + array + "," + prefix + ")=>" + prefix);
for (int i = 0; i < array.size(); i++) {
ArrayList tempList = new ArrayList<>(array);
listAll(tempList, prefix + tempList.remove(i));
}
}
/**
* 无重复
* @param array
* @param prefix
* @param index
*/
public void listAllNoDirection(List<Integer> array, String prefix, int index) {
System.out.println("fn(" + array + "," + prefix + "," + index + ")=>" + prefix);
for (int i = index; i < array.size(); i++) {
ArrayList tempList = new ArrayList<>(array);
listAllNoDirection(tempList, prefix + tempList.remove(i), i);
}
}
人理解迭代 神理解递归,纸上画了半天,时常要捋一捋才好,程序打印结果:
//有重复
fn([1, 2, 3],)=>
fn([2, 3],1)=>1
fn([3],12)=>12
fn([],123)=>123
fn([2],13)=>13
fn([],132)=>132
fn([1, 3],2)=>2
fn([3],21)=>21
fn([],213)=>213
fn([1],23)=>23
fn([],231)=>231
fn([1, 2],3)=>3
fn([2],31)=>31
fn([],312)=>312
fn([1],32)=>32
fn([],321)=>321
//无重复
fn([1, 2, 3],,0)=>
fn([2, 3],1,0)=>1
fn([3],12,0)=>12
fn([],123,0)=>123
fn([2],13,1)=>13
fn([1, 3],2,1)=>2
fn([1],23,1)=>23
fn([1, 2],3,2)=>3
缩进是我手动加的 方便理解哈
1820

被折叠的 条评论
为什么被折叠?



