Skip to content

Commit 3879607

Browse files
RenliangShiHai Hoang Dang
authored andcommitted
generate_parenthesis (keon#384)
* generate_parenthesis * format
1 parent 48072b4 commit 3879607

File tree

2 files changed

+31
-3
lines changed

2 files changed

+31
-3
lines changed

algorithms/backtrack/generate_parenthesis.py

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,30 @@
1414
"""
1515

1616

17-
def generate_parenthesis(n):
17+
def generate_parenthesis_v1(n):
1818
def add_pair(res, s, left, right):
1919
if left == 0 and right == 0:
2020
res.append(s)
2121
return
2222
if right > 0:
23-
add_pair(res, s+")", left, right-1)
23+
add_pair(res, s + ")", left, right - 1)
2424
if left > 0:
25-
add_pair(res, s+"(", left-1, right+1)
25+
add_pair(res, s + "(", left - 1, right + 1)
2626

2727
res = []
2828
add_pair(res, "", n, 0)
2929
return res
30+
31+
32+
def generate_parenthesis_v2(n):
33+
def add_pair(res, s, left, right):
34+
if left == 0 and right == 0:
35+
res.append(s)
36+
if left > 0:
37+
add_pair(res, s + "(", left - 1, right)
38+
if right > 0 and left < right:
39+
add_pair(res, s + ")", left, right - 1)
40+
41+
res = []
42+
add_pair(res, "", n, n)
43+
return res

tests/test_backtrack.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
)
1212

1313
import unittest
14+
from algorithms.backtrack.generate_parenthesis import *
1415

1516

1617
class TestAddOperator(unittest.TestCase):
@@ -170,3 +171,16 @@ def test_pattern_match(self):
170171
self.assertTrue(pattern_match(pattern1, string1))
171172
self.assertTrue(pattern_match(pattern2, string2))
172173
self.assertFalse(pattern_match(pattern3, string3))
174+
175+
class TestGenerateParenthesis(unittest.TestCase):
176+
177+
def test_generate_parenthesis(self):
178+
self.assertEqual(generate_parenthesis_v1(2), ['()()', '(())'])
179+
self.assertEqual(generate_parenthesis_v1(3), ['()()()', '()(())', '(())()', '(()())', '((()))'])
180+
self.assertEqual(generate_parenthesis_v2(2), ['(())', '()()'])
181+
self.assertEqual(generate_parenthesis_v2(3), ['((()))', '(()())', '(())()', '()(())', '()()()'])
182+
183+
if __name__ == '__main__':
184+
185+
unittest.main()
186+

0 commit comments

Comments
 (0)