子集 【牛客网 求子集问题】

给定一组不含重复元素的整数数组 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;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_35634181/article/details/82530543