[刷题]Subsets

原创 2015年07月07日 20:59:00

[LintCode]Subsets

Version I

class Solution {
    /**
     * @param S: A set of numbers.
     * @return: A list of lists. All valid subsets.
     */
    public ArrayList<ArrayList<Integer>> subsets(ArrayList<Integer> S) {
        // 2015-07-07
        ArrayList<ArrayList<Integer>> rst = new ArrayList<>();
        if (S == null) {
            return rst;
        }
        ArrayList<Integer> list = new ArrayList<>();
        
        helper(rst, list, S);
        return rst;
    }
    
    private void helper(ArrayList<ArrayList<Integer>> rst, 
            ArrayList<Integer>list, ArrayList<Integer> S) {
        rst.add(new ArrayList<Integer>(list));
        // 树的深度
        // if (list.size() == S.size()) {
        //     return;
        // }
        
        for (int i = 0; i < S.size(); i++) {
            if (list.size() > 0 && list.get(list.size() - 1) >= S.get(i)) {
                continue;
            }
            list.add(S.get(i));
            helper(rst, list, S);
            list.remove(list.size() - 1);
        }
        return;
    }
}

Version II

class Solution {
    /**
     * @param S: A set of numbers.
     * @return: A list of lists. All valid subsets.
     */
    public ArrayList<ArrayList<Integer>> subsets(ArrayList<Integer> S) {
        // 2015-08-28
        // S中不含相同元素,每个元素只可以用一次
        // 解集中不可以含相同解
        // 因此 解中不会含相同元素
        ArrayList<ArrayList<Integer>> rst = new ArrayList<>();
        if (S == null || S.size() == 0) {
            return rst;
        }
        Collections.sort(S);
        ArrayList<Integer> list = new ArrayList<>();
        helper(S, rst, list, 0);
        return rst;
        
    }
    
    private void helper(ArrayList<Integer> S, ArrayList<ArrayList<Integer>> rst, 
            ArrayList<Integer> list, int pos) {
        rst.add(new ArrayList<Integer>(list));
        // if (pos == S.size()) {
        //     return;
        // }
        for (int i = pos; i < S.size(); i++) {
            list.add(S.get(i));
            helper(S, rst, list, i + 1);
            list.remove(list.size() - 1);
        }
    }
}



相关文章推荐

Leetcode刷题系列(一)Subsets 与 Permutation

Leetcode刷题系列(一)Subsets 与 Permutation  这两种题型如果用Recursion的方法来解决,其思路是及其相似的。1.Subsets I内容Given a set of ...

LeetCode刷题笔录Subsets

自己总是写不出递归的方法,只能用f

18.Subsets II-带重复元素的子集(中等题)

带重复元素的子集 题目给定一个可能具有重复数字的列表,返回其所有可能的子集注意事项 子集中的每个元素都是非降序的 两个子集间的顺序是无关紧要的 解集中不能包含重复子集 样例如果 S = [1,...

17.Subsets-子集(中等题)

子集 题目给定一个含不同整数的集合,返回其所有的子集注意事项 子集中的元素排列必须是非降序的,解集必须不包含重复的子集 样例如果 S = [1,2,3],有如下的解: 挑战你可以同时用递归与非递归...

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
  • 374
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[刷题]Subsets
举报原因:
原因补充:

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