zoukankan      html  css  js  c++  java
  • LeetCode——子集 i-ii

    Q:现在有一个没有重复元素的整数集合S,求S的所有子集
    注意:

    • 你给出的子集中的元素必须按非递增的顺序排列
    • 给出的解集中不能出现重复的元素

    例如:
    如果S=[1,2,3], 给出的解集应为:
    [↵ [3],↵ [1],↵ [2],↵ [1,2,3],↵ [1,3],↵ [2,3],↵ [1,2],↵ []↵]

    A:

        ArrayList<ArrayList<Integer>> res = new ArrayList<>();
    
        public ArrayList<ArrayList<Integer>> subsets(int[] nums) {
            if (nums.length == 0)
                return res;
            //保证非递增
            Arrays.sort(nums);
            ArrayList<Integer> array = new ArrayList<>();
            for (int i = 0; i < nums.length; i++) {
                //i是这次需要的数量
                DFS(array, i, 0, nums);
            }
            return res;
        }
    
        private void DFS(ArrayList<Integer> array, int count, int start, int[] nums) {
            if (count < 0)
                return;
            else if (count == 0)
                res.add(new ArrayList<>(array));
            else {
                for (int i = start; i < nums.length; i++) {
                    array.add(nums[i]);
                    //从当前的下一个开始,count的数量减一,开始的地方加一
                    DFS(array, count - 1, i + 1, nums);
                    array.remove(array.size() - 1);
                }
            }
        }
    

    Q:给出一个可能包含重复元素的整数集合S,返回该整数集合的所有子集。
    注意:

    • 你给出的子集中的元素要按非递增的顺序排列
    • 给出的解集中不能包含重复的子集

    例如:
    如果S =[1,2,2], 给出的解集应该是:
    [↵ [2],↵ [1],↵ [1,2,2],↵ [2,2],↵ [1,2],↵ []↵]

    A:比上一个多加一个判断条件

        ArrayList<ArrayList<Integer>> res = new ArrayList<>();
    
        public ArrayList<ArrayList<Integer>> subsets(int[] nums) {
            if (nums.length == 0)
                return res;
            Arrays.sort(nums);
            ArrayList<Integer> array = new ArrayList<>();
            for (int i = 0; i < nums.length; i++) {
                DFS(array, i, 0, nums);
            }
            return res;
        }
    
        private void DFS(ArrayList<Integer> array, int count, int start, int[] nums) {
            if (count < 0)
                return;
            else if (count == 0)
                res.add(new ArrayList<>(array));
            else {
                for (int i = start; i < nums.length; i++) {
                    if (i > start && nums[i] == nums[i - 1])
                        continue;
                    array.add(nums[i]);
                    DFS(array, count - 1, i + 1, nums);
                    array.remove(array.size() - 1);
                }
            }
        }
    
  • 相关阅读:
    轻量级数据库sqlite的使用
    Integer引发的思考
    css限制显示行数
    数据库 chapter 17 数据仓库与联机分析处理技术
    数据库 chapter 15 对象关系数据库系统
    数据库 chapter 16 XML数据库
    数据库 chapter 14 分布式数据库系统
    数据库 chapter 11 并发控制
    数据库 chapter 12 数据库管理系统
    数据库 chapter 13 数据库技术新发展
  • 原文地址:https://www.cnblogs.com/xym4869/p/12527402.html
Copyright © 2011-2022 走看看