题意: 给出一个数组,返回他的所有子集
思路: 用位运算枚举,易知长度为n的数组子集有2^n个,比如n=3,位运算枚举结果为 000,001,010,011,100,101,110,111
import java.util.ArrayList;
import java.util.List;
public class Solution {
List<List<Integer>> ans = new ArrayList<List<Integer>>();
List<Integer> list = new ArrayList<Integer>();
public List<List<Integer>> subsets(int[] a) {
int n = a.length;
for (int i = 0; i < (1<<n); i++) {
for (int j = 0; j <n; j++) {
int k = i & (1<<j);
if(k!=0){
list.add(a[j]);
}
}
ans.add(new ArrayList(list));
list.clear();
}
return ans;
}
}