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. }

    0-1 状态可以用二进制位来表示,于是就有了下面的优化方法
    image.png
    这个跟N皇后的位优化有异曲同工的地方