题目来源:力扣(LeetCode)
思路来源LeetCode 78. 子集
题目
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
输入: nums = [1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
思路简述
用 0 和 1 来代表每位数选还是不选,对于三个数字的子集, 就是从 0 到 111 即(1000 - 1), 判断每位数是否是 1 ,判断当前数是否选择。
000 三个数都没选
001 选了三号数
010 选了二号数
011 选了二、三号数
100 选了一号数
101 选了一、三号数
110 选了一、二号数
111 三个数都选了
代码
class Solution {
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> res = new ArrayList<List<Integer>>();//数组列表
for(int i = 0; i < (1 << nums.length); i++){//得到每个数选和不选的所有可能
List<Integer> sub = new ArrayList<>();//数组
for(int j = 0; j < nums.length; j++){//每一位选了还是没选
if(((i >> j) & 1) == 1){//选了
sub.add(nums[j]);//那一位的数字加进来
}
}
res.add(sub);//每次的数组加进来
}
return res;//返回结果
}
}