使用二进制的特性可以处理子集问题
package 递归.递归进阶;
import java.util.ArrayList;
import java.util.Arrays;
public class 子集生成之二进制法 {
public static void main(String[] args) {
int[] A ={1,2,3,4,5};
ArrayList<ArrayList<Integer>> solve = solve(A, A.length);
System.out.println(solve);
}
public static ArrayList<ArrayList<Integer>> solve(int [] A,int n){
Arrays.sort(A);
ArrayList<ArrayList<Integer>> res =new ArrayList<>();
for (int i = (int) (Math.pow(2,n)-1); i >0 ; i--) {
ArrayList<Integer> ints =new ArrayList<>();
for (int j = n-1; j >=0 ; j--) {
if (((i>>j)&1)==1){//找到位为1的
ints.add(A[j]);
}
}
res.add(ints);
}
return res;
}
}