给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]
思路:对于子集问题,可以用"与运算"进行求解,例如本题求所有的子集可能,总共有8中可能,对应000,001,010,011,100,101,110,111,其中1代表选中,0代表不选,所以这就对应了该数的二进制。所以我们先求出所有的可能,然后求每一个位数对应的是0还是1即可。
与本题相关的题型HPU 1192 Sequence
public class Main {
public static void main(String[] args) {
int[] b={1,2,3};
List<List<Integer>> subsets = subsets(b);
for (List<Integer> subset : subsets) {
for (Integer integer : subset) {
System.out.print(integer);
}
System.out.println();
}
}
public static List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> list=new LinkedList<>();
int size = (int) Math.pow(2, nums.length);
int len=nums.length;
for (int i = 0; i < size; i++) { //代表数组中的元素,第几个
List<Integer>l=new LinkedList<>();
for (int j = 0; j < len; j++) { //判断第几位
if((i & (1<<j))>0){ //该位数是否在集合中
System.out.println(nums[j]);
l.add(nums[j]);
}
}
list.add(l);
}
return list;
}
}