题目:
给定一组不含重复元素的整数数组 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
> subsets(int[] nums) { 3 //int len = nums.length; 4 int end = (int)Math.pow(2,nums.length); 5 List
> 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 subset(int[] nums, int m)14 {15 List 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 }