LeetCode - subconjuntos I-II

Q: En la actualidad existe un conjunto de número entero no hay elementos duplicados S, S Buscar todos los subconjuntos
Nota:

  • Subconjunto de elementos que dan debe ser ordenada en orden no creciente
  • Soluciones dadas elementos repetidos no aparecerá concentrado

Por ejemplo:
Si S = [1,2,3], Solución Set se dará:
.. [↵ [3], ↵ [1], ↵ [2], ↵ [l, 2,3], ↵ [1,. 3], ↵ [2,3], ↵ [1,2], ↵ [] ↵]

UN:

    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: un número entero de un elemento dado puede contener duplicado conjunto S, un subconjunto de la devolución todos los conjuntos de números enteros.
nota:

  • elemento subconjunto se dan con el fin de no aumentar YAOAN
  • Soluciones de concentración determinado subconjunto no pueden contener duplicado

Por ejemplo:
Si S = [1,2,2], se debe dar Solution Set:
. [↵ [2], ↵ [1], ↵ [1,2,2], ↵ [2,2 &], ↵ [ 1,2], ↵ [] ↵]

A: uno más que una condición de determinación

    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);
            }
        }
    }

Supongo que te gusta

Origin www.cnblogs.com/xym4869/p/12527402.html
Recomendado
Clasificación