78. Subsets

    /*
     * 78. Subsets 
     * 2015.12.16 by Mingyang
     * 注意这里虽然感觉很像combine,但是这个array可以随意的,可以为任意数的array,所以还是得用array来
     * 并且那个array要sort一下,记住,千万不要忘了加空集
     * 1.长度标准:从空集,到本身长度的集合
     * 2.可选的范围:从start开始到最后一个
     * 3.往前走一步:item加一个,然后start加1表示从下一位加起,然后count也减一个
     * 4.后退一步:不用,因为传进去是string,不会对当前状态进行影响
     * 5.特别的case:count小于等于0
     * 6.关于重复:无
     */
    public static List<List<Integer>> subsets(int[] nums) {
        List<List<Integer>> res = new ArrayList<List<Integer>>();
        ArrayList<Integer> item = new ArrayList<Integer>();
        Arrays.sort(nums);
        for (int len = 1; len <= nums.length; len++)
            dfs3(nums, 0, len, item, res);
        res.add(new ArrayList<Integer>());
        return res;
    }
    public static void dfs3(int[] S, int start, int len, List<Integer> item,List<List<Integer>> res) {
        if (item.size() == len) {
            res.add(new ArrayList<Integer>(item));
            return;
        }
        for (int i = start; i < S.length; i++) {
            item.add(S[i]);
            dfs3(S, i + 1, len, item, res);
            item.remove(item.size() - 1);
        }
    }
原文地址:https://www.cnblogs.com/zmyvszk/p/5488106.html