其实就是每个元素选和不选的事, 通用的暴力递归
public static void main(String[] args) {
int[] arr = {1,2,3};
List<Integer> list = new ArrayList<>();
List<List<Integer>> res = new ArrayList<>();
process(arr , 0, list, res);
System.out.println("=== ");
}
/**像这种浅拷贝的方式需要考虑一下回溯的问题*/
public static void process(int[] arr, int index, List<Integer> sb, List<List<Integer>> list){
if(index == arr.length){
list.add(sb);
return ;
}
List<Integer> temp = new ArrayList<>();
temp.addAll(sb);
process(arr,index+1, temp, list);
temp = sb;
temp.add(arr[index]);
process(arr, index+1, temp, list);
}
还是这道题,因为要保存路径,所以每次调用要将参数中的sb重新申请空间来存储,因为如果不重新赋值的话,引用的内存空间新数据会覆盖旧数据。
记得有一种方式能够简化这种赋值操作来着。之后再回来看看