zoukankan      html  css  js  c++  java
  • 90. 子集 II

    class Solution {
        private List ls;
        private int n;
        private LinkedList path;
    
        public List<List<Integer>> subsetsWithDup(int[] nums) {
            ls = new LinkedList<LinkedList<Integer>>();
            path = new LinkedList<Integer>();
            n = nums.length;
            Arrays.sort(nums);
    
            dfs(nums, 0);
            return ls;
        }
    
        private void dfs(int[] nums, int u) {
            if (u == n) {
                ls.add(path.clone());
                return;
            }
            int k = 0;
            while (u + k < n && nums[u + k] == nums[u])
                k++;
    
            for (int i = 0; i <= k; i++) {  //看看几个连续的数
                dfs(nums, u + k);
                path.add(nums[u]); //也就是连续加了多少次nums[u] 前后导致重复出现  递归变成nums[u]连续出现几次 也就是对象是一连串的数字而非一连串的数字中的一个一个
                                    //而且是按顺序个数递增 所以不用考虑 2(1) 2(2) 和2(2) 2(1)元素位置上的变化
            }                       //只是求子集 所以每个数只考虑选不选 而不需考虑顺序
            for (int i = 0; i <= k; i++) //恢复现场 吐出来
                path.removeLast();
        }
    }
    
    
  • 相关阅读:
    20210608日报
    数据结构-四则表达式运算
    软工博客归档工具(自用)
    阅读笔记6
    阅读笔记4
    阅读笔记3
    阅读笔记2
    阅读笔记5
    阅读笔记1
    大二下第16周总结
  • 原文地址:https://www.cnblogs.com/cznczai/p/11393774.html
Copyright © 2011-2022 走看看