幂集
幂集。编写一种方法,返回某集合的所有子集。集合中不包含重复的元素。
说明:解集不能包含重复的子集。
方法一:逐步添加
{a,b}为{a,b,c}的子集,对于新增的元素c,可在{a,b}的所有子集中加上c,由此可获得 {a,b,c}的所有子集。
class Solution {
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> res = new ArrayList<>();
res.add(new ArrayList<>());
for (int num : nums){
for (int i = 0,size = res.size(); i<size; i++){
List<Integer> sublist = new ArrayList<>();
sublist.addAll(res.get(i));
sublist.add(num);
res.add(sublist);
}
}
return res;
}
}
方法二:位运算
对于{a,b,c}的所有子集,可看作是否包含某个位置的元素, 总共有2^3个
{}-000,{c}-001,{b}-010,{a}-100
{a,b}-110,{a, c}-101,{b,c}-011
{a,b,c}-111
class Solution {
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> res = new ArrayList<>();
for (int i = 0; i < 1<<nums.length; i++){
List<Integer> sublist = new ArrayList<>();
for (int j = 0; j < nums.length; j++){
if (((i>>j) & 1) == 1){
sublist.add(nums[j]);
}
}
res.add(sublist);
}
return res;
}
}