image.png
    其实就是每个元素选和不选的事, 通用的暴力递归

    1. public static void main(String[] args) {
    2. int[] arr = {1,2,3};
    3. List<Integer> list = new ArrayList<>();
    4. List<List<Integer>> res = new ArrayList<>();
    5. process(arr , 0, list, res);
    6. System.out.println("=== ");
    7. }
    8. /**像这种浅拷贝的方式需要考虑一下回溯的问题*/
    9. public static void process(int[] arr, int index, List<Integer> sb, List<List<Integer>> list){
    10. if(index == arr.length){
    11. list.add(sb);
    12. return ;
    13. }
    14. List<Integer> temp = new ArrayList<>();
    15. temp.addAll(sb);
    16. process(arr,index+1, temp, list);
    17. temp = sb;
    18. temp.add(arr[index]);
    19. process(arr, index+1, temp, list);
    20. }

    还是这道题,因为要保存路径,所以每次调用要将参数中的sb重新申请空间来存储,因为如果不重新赋值的话,引用的内存空间新数据会覆盖旧数据。
    记得有一种方式能够简化这种赋值操作来着。之后再回来看看