From 68eca139ca107d17d0fbc56f906699b7d2b82258 Mon Sep 17 00:00:00 2001 From: Jason Staten Date: Sun, 16 Oct 2022 20:19:54 -0600 Subject: [PATCH] genparen --- genparen/genparen.go | 25 +++++++++++++++++++++++++ genparen/genparen_test.go | 24 ++++++++++++++++++++++++ genparen/readme.md | 24 ++++++++++++++++++++++++ 3 files changed, 73 insertions(+) create mode 100644 genparen/genparen.go create mode 100644 genparen/genparen_test.go create mode 100644 genparen/readme.md diff --git a/genparen/genparen.go b/genparen/genparen.go new file mode 100644 index 0000000..7352a5f --- /dev/null +++ b/genparen/genparen.go @@ -0,0 +1,25 @@ +package genparen + +func iter(result *[]string, current string, left int, right int) { + if left == 0 && right == 0 { + *result = append(*result, current) + return + } + + if left > 0 { + iter(result, current+"(", left-1, right) + } + if right > left { + iter(result, current+")", left, right-1) + } +} + +func generateParenthesis(n int) []string { + result := make([]string, 0, n^2) + iter(&result, "", n, n) + return result +} + +func Gen(n int) []string { + return generateParenthesis(n) +} diff --git a/genparen/genparen_test.go b/genparen/genparen_test.go new file mode 100644 index 0000000..8cc94df --- /dev/null +++ b/genparen/genparen_test.go @@ -0,0 +1,24 @@ +package genparen_test + +import ( + "testing" + + "git.jxs.me/leetgo/genparen" + "github.com/stretchr/testify/require" +) + +func TestEmpty(t *testing.T) { + require.Equal(t, []string{""}, genparen.Gen(0)) +} + +func TestOne(t *testing.T) { + require.Equal(t, []string{"()"}, genparen.Gen(1)) +} + +func TestTwo(t *testing.T) { + require.Equal(t, []string{"(())", "()()"}, genparen.Gen(2)) +} + +func TestThree(t *testing.T) { + require.Equal(t, []string{"((()))", "(()())", "(())()", "()(())", "()()()"}, genparen.Gen(3)) +} diff --git a/genparen/readme.md b/genparen/readme.md new file mode 100644 index 0000000..79fa50e --- /dev/null +++ b/genparen/readme.md @@ -0,0 +1,24 @@ +22. Generate Parentheses +Medium + +Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses. + + + +Example 1: + +Input: n = 3 +Output: ["((()))","(()())","(())()","()(())","()()()"] + +Example 2: + +Input: n = 1 +Output: ["()"] + + + +Constraints: + + 1 <= n <= 8 + +