public static List<List<Integer>> calSum(int[] arr,int n,int m){
if(arr==null){
return null;
}
List<List<Integer>> ans = new ArrayList<>();
int len = arr.length;
int bit = 1 << len;
for(int i = 0;i<bit ;i++){
if(numOf1(i)==m){
int sum=0;
List<Integer> list = new ArrayList<>();
for(int j=0;j<len;j++){
if((i & 1 << j)!=0){
sum+= arr[j];
list.add(arr[j]);
}
}
if(sum==n){
ans.add(list);
}
}
}
return ans;
}
统计一个数中二进制的个数
public static int numOf1(int n){
int count = 0;
while(n!=0){
++count;
n = n & (n-1);
}
return count;
}