其实就是每个元素选和不选的事, 通用的暴力递归
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);
}
0-1 状态可以用二进制位来表示,于是就有了下面的优化方法
这个跟N皇后的位优化有异曲同工的地方