Subsets

原创 2015年11月17日 16:40:10

Given a set of distinct integers, nums, return all possible subsets.

Note:
Elements in a subset must be in non-descending order.
The solution set must not contain duplicate subsets.
For example,
If nums = [1,2,3], a solution is:

[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]

public class Solution {
    //solution 1: backtrace, enumerate all the situation
    //solution 2: start {{}} 
    //            add 1 {{} {1}}
    //            add 2 {{} {1} {2} {1, 2}}
    //            add 3 {{} {1} {2} {1, 2} {3}, {1, 3}, {2, 3}, {1,2,3}}

    //solution 3: bit mapulation number of array will have 2^n subset. eg, a,b,c for 3(011) => bc


    // public void helper(List<List<Integer>>res, List<Integer> item, int start, int[] nums) {
    //     if(item.size() == nums.length)
    //         return;
    //     for(int i = start; i < nums.length; i++) {
    //         item.add(nums[i]);
    //         res.add(new ArrayList<Integer>(item));
    //         helper(res, item, i + 1, nums);
    //         item.remove(item.size() - 1);
    //     }
    // }

    // public List<List<Integer>> subsets(int[] nums) {
    //     List<List<Integer>> res = new ArrayList<>();
    //     if(nums == null || nums.length == 0)
    //         return res;
    //     Arrays.sort(nums);
    //     helper(res, new ArrayList<Integer>(), 0, nums);
    //     //add the [] to list
    //     res.add(new ArrayList<Integer>());
    //     return res;
    // }


    // public List<List<Integer>> subsets(int[] nums) {
    //     List<List<Integer>> res = new ArrayList<>();
    //     if(nums == null || nums.length == 0)
    //         return res;
    //     Arrays.sort(nums);
    //     res.add(new ArrayList<Integer>());
    //     for(int i = 0; i < nums.length; i++) {
    //         int size = res.size();
    //         for(int j = 0; j < size; j++) {
    //             List<Integer> item = new ArrayList<>();
    //             item.addAll(res.get(j));
    //             item.add(nums[i]);
    //             res.add(new ArrayList<Integer>(item));
    //         }
    //     }
    //     return res;
    // }

    public List<List<Integer>> subsets(int[] nums) {
        List<List<Integer>> res = new ArrayList<>();
        if(nums == null || nums.length == 0)
            return res;
        Arrays.sort(nums);
        res.add(new ArrayList<>());


        int size = 1 << nums.length;
        for(int i = 1; i < size; i++) {
            int flag = 1;
            List<Integer> item = new ArrayList<>();
            for(int j = 0; j < nums.length; j ++) {
                if((i & flag) != 0) {
                    item.add(nums[j]);
                }
                flag = flag << 1;
            }
            res.add(new ArrayList<>(item));
        }
        return res;
    }
}

相关文章推荐

Leetcode : Subsets II

URL:https://leetcode.com/problems/subsets-ii/#/description题目大意:Given a collection of integers that m...

leetcode 90. Subsets II

Given a collection of integers that might contain duplicates, nums, return all possible subsets. ...

【leetcode】90. Subsets II

leetcode, subsets ||, 3种解法

leetcode:暴力枚举法之Subsets II

leetcode:暴力枚举法之Subsets II 题目; Given a collection of integers that might contain duplicates, S, retur...

LeetCode OJ:Subsets II

Subsets II   Given a collection of integers that might contain duplicates, S, return all possible...

leetcode-78 Subsets

分析:求集合的所有子集问题。题目要求子集中元素非递减序排列,因此我们先要对原来的集合进行排序。原集合中每一个元素在子集中有两种状态:要么存在、要么不存在。这样构造子集的过程中每个元素就有两种选择方法:...
  • sole_cc
  • sole_cc
  • 2015年03月28日 19:19
  • 379

【2015新手赛网络赛】 1004 Good Subsets

题意给定一个数N,问所有满足下述性质的集合的个数: 集合中所有数的数码都只出现一次。 例如:{135,27,49}符合,{134,27,49}不符合(因为出现了两个4),{177,23}不符合(因...

78. Subsets

回溯,位操作

[leetcode 78 & 90, Medium] Subsets I and II

Subsets I and II

Subsets II -- leetcode

Given a collection of integers that might contain duplicates, S, return all possible subsets. Not...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Subsets
举报原因:
原因补充:

(最多只允许输入30个字)