main
Jason Staten 2 years ago
parent 9790a5d6c5
commit 68eca139ca

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

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

@ -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
Loading…
Cancel
Save