整体思路就是穷举法,假设初始nums中有n个元素,n位二进制数每位可以赋值1或者0 ,全部结果为2^n。
为了保证2进制数的位数一致,从2n 到 2n+1 算,再截取到第一位。
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> result = new ArrayList();
int n = nums.length;
for (int i = (int)Math.pow(2, n); i < (int)Math.pow(2, n + 1); ++i) {
List<Integer> list = new ArrayList();
String bitmask = Integer.toBinaryString(i).substring(1);
for(int j=0;j<bitmask.length();j++){
if(bitmask.charAt(j)=='1'){
list.add(nums[j]);
}
}
result.add(list);
}
return result;
}