
解法
题解中的迭代的解法
利用索引的二进制来标记当次应该哪几位。
所有的子集一共有2的n次方种。刚好对应所有的索引的二进制,其中索引的二进制中的第i位为1表示第i位在此子集中。比如例子nums=[1,2,3],其中n=3,7可以表示为111,意思是123这三个数都在这个子集中。再比如3的二进制是011,那么这个子集中的数据有2,3。
这样就将2的n次方种子集情况,全部都表示出来了。

class Solution {
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>>r=new ArrayList();
List<Integer>o=new ArrayList();
int n=nums.length;
for(int m=0;m<(1<<n);m++){
o.clear();
for(int i=0;i<n;i++){
if((m&(1<<i))!=0){
o.add(nums[i]);
}
}
r.add(new ArrayList(o));
}
return r;
}
}