给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]
///
思路: 本题利用位运算操作 来输出所有的数组情况:
例如nums内 000 ,表示没有元素,001 表示只有第一个元素, 010表示只有第二个的元素,100表示 只有第三个元素
那如何判断集合内有哪几个元素呢? 首先一共是有2^nums.length种情况,
假如是第i种情况: i&001为真 就说明这种情况中有第一个元素,为假就说明没有
然后推广一下: i&(1<<j)为真 就说明这种情况中有第j个元素,为假就说明没有
然后用两个循环就能遍历所有情况
//
class Solution {
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> ans = new ArrayList<>();
int all_set = 1<<nums.length ;
for(int i = 0;i<all_set ;i++)
{
List<Integer> elem =new ArrayList<>();
for(int j = 0 ; j<nums.length ;j++)
{
if((i&(1<<j) )!= 0 )
{
elem.add(nums[j]);
}
}
ans.add(elem);
}
return ans ;
}
}