zoukankan      html  css  js  c++  java
  • 90. Subsets II

        /*
         * 90. Subsets II 
    *12.16 by Mingyang * 这里我们将后面重复的部分算进来,就是当有重复出现的时候,结果不能重复,我就加了一个boolean array * 1.长度标准:从空集,到本身长度的集合 * 2.可选的范围:从start开始到最后一个 * 3.往前走一步:item加一个,然后start加1表示从下一位加起,然后count也减一个 * 4.后退一步:不用,因为传进去是string,不会对当前状态进行影响 * 5.特别的case:count小于等于0 * 6.关于重复:这里有重复出现,所以多了boolean array
    */ public static List<List<Integer>> subsetsWithDup(int[] nums) { List<List<Integer>> res = new ArrayList<List<Integer>>(); ArrayList<Integer> item = new ArrayList<Integer>(); if (nums.length == 0 || nums == null) return res; Arrays.sort(nums); boolean[] array = new boolean[nums.length]; for (int len = 1; len <= nums.length; len++) dfs3(nums, 0, len, item, res, array); res.add(new ArrayList<Integer>()); return res; } public static void dfs3(int[] S, int start, int len, List<Integer> item,List<List<Integer>> res, boolean[] array) { if (item.size() == len) { res.add(new ArrayList<Integer>(item)); return; } for (int i = start; i < S.length; i++) { if (i != 0 && S[i] == S[i - 1] && array[i - 1] == false)//这句非常关键,表示出了第一个以外,所有的跟前面一样的,并且前面还没用过(多半用了被重新还原的) continue; item.add(S[i]); array[i] = true; dfs3(S, i + 1, len, item, res, array); item.remove(item.size() - 1); array[i] = false; } }
  • 相关阅读:
    mysql主从原理
    mysql锁和事物隔离
    mysql索引查找原理及调优
    MySQL高级查询
    周总结04
    冲刺第六天
    冲刺第五天
    冲刺第四天
    典型用户模板和用户场景模版
    冲刺第三天
  • 原文地址:https://www.cnblogs.com/zmyvszk/p/5494851.html
Copyright © 2011-2022 走看看