diff --git a/java/22-Generate-Parenthesis.java b/java/22-Generate-Parenthesis.java new file mode 100644 index 000000000..ff4fdf64b --- /dev/null +++ b/java/22-Generate-Parenthesis.java @@ -0,0 +1,27 @@ +class GenerateParenthesis { + public List generateParenthesis(int n) { + List result = new ArrayList<>(); + Stack stack = new Stack<>(); + + backtrack(0, 0, n, result, stack); + return result; + } + + private void backtrack(int open, int closed, int n, List result, Stack stack) { + if (open == n && closed == n) { + result.add(stack.stream().collect(Collectors.joining(""))); + } + + if (open < n) { + stack.push("("); + backtrack(open + 1, closed, n, result, stack); + stack.pop(); + } + + if (closed < open) { + stack.push(")"); + backtrack(open, closed + 1, n, result, stack); + stack.pop(); + } + } +}