leetcode 78. 子集 JAVA

题目:

给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。

说明:解集不能包含重复的子集。

示例:

输入: nums = [1,2,3]
输出:
[
  [3],
  [1],
  [2],
  [1,2,3],
  [1,3],
  [2,3],
  [1,2],
  []
]

 

思路:

位运算,求出数组nums的长度n,则一共有2^n个子集,则从0遍历到2^ n - 1,将其转换成2进制数,将2进制数中为1的位置对应的数组元素加入到子集中。

 1 class Solution {
 2     public List<List<Integer>> subsets(int[] nums) {
 3         //int len = nums.length;
 4         int end = (int)Math.pow(2,nums.length);
 5         List<List<Integer>> res = new ArrayList<>();
 6         for(int i = 0; i < end; i++)
 7         {
 8             res.add(subset(nums,i));
 9         }
10         return res;
11     }
12     
13     public List<Integer> subset(int[] nums, int m)
14     {
15         List<Integer> res = new ArrayList<>();
16         int i = 0;
17         while(m != 0)
18         {
19             if(m % 2 != 0)
20             {
21                 res.add(nums[i]);
22             }
23             m = m / 2;
24             i++;
25         }
26         return res;
27     }
28 }

 

posted @ 2019-04-15 22:00  yanhowever  阅读(681)  评论(0编辑  收藏  举报