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);
                }
            }
        }
    
  • 相关阅读:
    数论 --- 斐波纳挈数列公式的变形
    计算几何 --- 凸包 模板
    计算几何 : 凸包学习笔记 --- Graham 扫描法
    iOS 给图片添加水印
    iOS 生成随机字符串 从指定字符串随机产生n个长度的新字符串
    pod install 出现 Unable to find a specification for `xxxxx` 解决方案
    UITextView 实现链接点击事件
    UILabel图文混排显示图片和文字
    YYLabel 自动布局 富文本文字点击事件
    解决Cornerstone不能上传.a文件的问题 Cornerstone不上传*.xcuserstate,*.xcbkptlist文件
  • 原文地址:https://www.cnblogs.com/xym4869/p/12527402.html
Copyright © 2011-2022 走看看