From 64cf1fbbbf6f0bdc084d7a88d74f9d47ba0b2446 Mon Sep 17 00:00:00 2001 From: Atousa Duprat Date: Wed, 19 May 2021 17:29:31 -0700 Subject: [PATCH] Generate subsets without duplicate --- Recursion/SubsetsWithDuplicate.java | 47 +++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 Recursion/SubsetsWithDuplicate.java diff --git a/Recursion/SubsetsWithDuplicate.java b/Recursion/SubsetsWithDuplicate.java new file mode 100644 index 0000000..7ee4a79 --- /dev/null +++ b/Recursion/SubsetsWithDuplicate.java @@ -0,0 +1,47 @@ +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +//leetcode 90 +public class SubsetsWithDuplicate { + + static List> result = new ArrayList<>(); + + public static List> subsetsWithDuplicate(int[] s) { + Arrays.sort(s); + List slate = new ArrayList<>(); + subsetsWithDuplicateHelper(s, 0, slate); + return result; + } + + + private static void subsetsWithDuplicateHelper(int[] s, int idx, List slate) { + + if (idx == s.length) { + result.add(new ArrayList<>(slate)); + return; + } + int counter = 1; + while (idx < s.length-1 && s[idx] == s[idx + 1]) { + counter++; + idx++; + } + int c = counter; + subsetsWithDuplicateHelper(s, idx + 1, slate); + while (c > 0) { + slate.add(s[idx]); + subsetsWithDuplicateHelper(s, idx + 1, slate); + c--; + } + while(counter>0) { + slate.remove(slate.size()-1); + counter--; + } + } + + public static void main(String[] args) { + int[] c = {1,2,1,1,2}; + subsetsWithDuplicate(c); + System.out.println(result); + } +}