From faf2975ea7a8e7692db6c88da97fb4a9c58f3a88 Mon Sep 17 00:00:00 2001 From: Jibesh Roy Date: Sun, 8 Oct 2023 09:29:12 +0530 Subject: [PATCH 01/17] Added new file Generate Parenthesis --- backtracking/generate_parenthesis.py | 48 ++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 backtracking/generate_parenthesis.py diff --git a/backtracking/generate_parenthesis.py b/backtracking/generate_parenthesis.py new file mode 100644 index 000000000000..f321e17e20c5 --- /dev/null +++ b/backtracking/generate_parenthesis.py @@ -0,0 +1,48 @@ +""" + Given 'n' Pairs of parenthesis, + this program generates all combinations of parenthesis + Example, n=3 : + [ + "((()))", + "(()())", + "(())()", + "()(())", + "()()()" + ] + This problem is solved using Backtracking +""" +def solve(op,open,close, ans): + if(open == 0 and close == 0): + ans.append(op) + return + if(open == close): + op1 = op + op1+=('(') + solve(op1, open-1, close, ans) + elif(open == 0): + op1 = op + op1+=(')') + solve(op1, open, close-1, ans) + elif(close == 0): + op1 = op + op1+=('(') + solve(op1, open-1, close, ans) + else: + op1 = op + op2 = op + op1+=('(') + op2+=(')') + solve(op1, open-1, close, ans) + solve(op2, open, close-1, ans) + + +def generateParenthesis(n): + open = n + close = n + ans=[] + op = "" + solve(op, open, close, ans) + return ans + + +print(generateParenthesis(3)) \ No newline at end of file From 60fc3942b87b13ae67116eabb7ae1b9c6e91c15c Mon Sep 17 00:00:00 2001 From: Jibesh10101011 <114723590+Jibesh10101011@users.noreply.github.com> Date: Sun, 8 Oct 2023 09:40:38 +0530 Subject: [PATCH 02/17] Update generate_parenthesis.py --- backtracking/generate_parenthesis.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backtracking/generate_parenthesis.py b/backtracking/generate_parenthesis.py index f321e17e20c5..64df529add63 100644 --- a/backtracking/generate_parenthesis.py +++ b/backtracking/generate_parenthesis.py @@ -36,7 +36,7 @@ def solve(op,open,close, ans): solve(op2, open, close-1, ans) -def generateParenthesis(n): +def generate_parenthesis(n): open = n close = n ans=[] @@ -45,4 +45,4 @@ def generateParenthesis(n): return ans -print(generateParenthesis(3)) \ No newline at end of file +print(generateParenthesis(3)) From 98d7c272bec658859251b894981deb4a9b0e074e Mon Sep 17 00:00:00 2001 From: Jibesh10101011 <114723590+Jibesh10101011@users.noreply.github.com> Date: Sun, 8 Oct 2023 09:41:12 +0530 Subject: [PATCH 03/17] Update generate_parenthesis.py --- backtracking/generate_parenthesis.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backtracking/generate_parenthesis.py b/backtracking/generate_parenthesis.py index 64df529add63..1a106c255549 100644 --- a/backtracking/generate_parenthesis.py +++ b/backtracking/generate_parenthesis.py @@ -45,4 +45,4 @@ def generate_parenthesis(n): return ans -print(generateParenthesis(3)) +print(generate_parenthesis(3)) From b0a0f676be2046f4864de5abe266bbf51d032590 Mon Sep 17 00:00:00 2001 From: Jibesh10101011 <114723590+Jibesh10101011@users.noreply.github.com> Date: Sun, 8 Oct 2023 09:48:34 +0530 Subject: [PATCH 04/17] Update generate_parenthesis.py --- backtracking/generate_parenthesis.py | 68 ++++++++++++++-------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/backtracking/generate_parenthesis.py b/backtracking/generate_parenthesis.py index 1a106c255549..a3d0bd100679 100644 --- a/backtracking/generate_parenthesis.py +++ b/backtracking/generate_parenthesis.py @@ -1,48 +1,48 @@ """ - Given 'n' Pairs of parenthesis, - this program generates all combinations of parenthesis - Example, n=3 : - [ - "((()))", - "(()())", - "(())()", - "()(())", - "()()()" - ] - This problem is solved using Backtracking +Given 'n' Pairs of parenthesis, +this program generates all combinations of parenthesis +Example, n=3 : +[ + "((()))", + "(()())", + "(())()", + "()(())", + "()()()" +] +This problem is solved using Backtracking """ def solve(op,open,close, ans): if(open == 0 and close == 0): - ans.append(op) - return + ans.append(op) + return if(open == close): - op1 = op - op1+=('(') - solve(op1, open-1, close, ans) + op1 = op + op1+=('(') + solve(op1, open-1, close, ans) elif(open == 0): - op1 = op - op1+=(')') - solve(op1, open, close-1, ans) + op1 = op + op1+=(')') + solve(op1, open, close-1, ans) elif(close == 0): - op1 = op - op1+=('(') - solve(op1, open-1, close, ans) + op1 = op + op1+=('(') + solve(op1, open-1, close, ans) else: - op1 = op - op2 = op - op1+=('(') - op2+=(')') - solve(op1, open-1, close, ans) - solve(op2, open, close-1, ans) + op1 = op + op2 = op + op1+=('(') + op2+=(')') + solve(op1, open-1, close, ans) + solve(op2, open, close-1, ans) def generate_parenthesis(n): - open = n - close = n - ans=[] - op = "" - solve(op, open, close, ans) - return ans + open = n + close = n + ans=[] + op = "" + solve(op, open, close, ans) + return ans print(generate_parenthesis(3)) From a69d5eb81e7b914c5c967149c5e7b656cd723ccc Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 8 Oct 2023 04:26:44 +0000 Subject: [PATCH 05/17] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- backtracking/generate_parenthesis.py | 64 ++++++++++++++-------------- 1 file changed, 33 insertions(+), 31 deletions(-) diff --git a/backtracking/generate_parenthesis.py b/backtracking/generate_parenthesis.py index a3d0bd100679..b5cf1542e6ed 100644 --- a/backtracking/generate_parenthesis.py +++ b/backtracking/generate_parenthesis.py @@ -1,6 +1,6 @@ """ Given 'n' Pairs of parenthesis, -this program generates all combinations of parenthesis +this program generates all combinations of parenthesis Example, n=3 : [ "((()))", @@ -9,40 +9,42 @@ "()(())", "()()()" ] -This problem is solved using Backtracking +This problem is solved using Backtracking """ -def solve(op,open,close, ans): - if(open == 0 and close == 0): - ans.append(op) - return - if(open == close): - op1 = op - op1+=('(') - solve(op1, open-1, close, ans) - elif(open == 0): - op1 = op - op1+=(')') - solve(op1, open, close-1, ans) - elif(close == 0): - op1 = op - op1+=('(') - solve(op1, open-1, close, ans) + + +def solve(op, open, close, ans): + if open == 0 and close == 0: + ans.append(op) + return + if open == close: + op1 = op + op1 += "(" + solve(op1, open - 1, close, ans) + elif open == 0: + op1 = op + op1 += ")" + solve(op1, open, close - 1, ans) + elif close == 0: + op1 = op + op1 += "(" + solve(op1, open - 1, close, ans) else: - op1 = op - op2 = op - op1+=('(') - op2+=(')') - solve(op1, open-1, close, ans) - solve(op2, open, close-1, ans) + op1 = op + op2 = op + op1 += "(" + op2 += ")" + solve(op1, open - 1, close, ans) + solve(op2, open, close - 1, ans) def generate_parenthesis(n): - open = n - close = n - ans=[] - op = "" - solve(op, open, close, ans) - return ans - + open = n + close = n + ans = [] + op = "" + solve(op, open, close, ans) + return ans + print(generate_parenthesis(3)) From 5ecc4611c13c81abf86c26c4658f8192fbfb5509 Mon Sep 17 00:00:00 2001 From: Jibesh10101011 <114723590+Jibesh10101011@users.noreply.github.com> Date: Sun, 8 Oct 2023 10:22:50 +0530 Subject: [PATCH 06/17] Update generate_parenthesis.py --- backtracking/generate_parenthesis.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backtracking/generate_parenthesis.py b/backtracking/generate_parenthesis.py index b5cf1542e6ed..b8275d4fbeda 100644 --- a/backtracking/generate_parenthesis.py +++ b/backtracking/generate_parenthesis.py @@ -13,7 +13,7 @@ """ -def solve(op, open, close, ans): +def solve(op, open, close, ans) -> int : if open == 0 and close == 0: ans.append(op) return @@ -38,7 +38,7 @@ def solve(op, open, close, ans): solve(op2, open, close - 1, ans) -def generate_parenthesis(n): +def generate_parenthesis(n) -> list[str] : open = n close = n ans = [] From 45eea59cfe5fe6204707ab9fa71b856475b2fc77 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 8 Oct 2023 04:53:23 +0000 Subject: [PATCH 07/17] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- backtracking/generate_parenthesis.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backtracking/generate_parenthesis.py b/backtracking/generate_parenthesis.py index b8275d4fbeda..36510faf1f18 100644 --- a/backtracking/generate_parenthesis.py +++ b/backtracking/generate_parenthesis.py @@ -13,7 +13,7 @@ """ -def solve(op, open, close, ans) -> int : +def solve(op, open, close, ans) -> int: if open == 0 and close == 0: ans.append(op) return @@ -38,7 +38,7 @@ def solve(op, open, close, ans) -> int : solve(op2, open, close - 1, ans) -def generate_parenthesis(n) -> list[str] : +def generate_parenthesis(n) -> list[str]: open = n close = n ans = [] From 76a64a008a9d873609e8bfae4bdb0af16c8f79ba Mon Sep 17 00:00:00 2001 From: Jibesh10101011 <114723590+Jibesh10101011@users.noreply.github.com> Date: Sun, 8 Oct 2023 11:34:03 +0530 Subject: [PATCH 08/17] Update generate_parenthesis.py --- backtracking/generate_parenthesis.py | 87 ++++++++++++++-------------- 1 file changed, 44 insertions(+), 43 deletions(-) diff --git a/backtracking/generate_parenthesis.py b/backtracking/generate_parenthesis.py index 36510faf1f18..fd03ea64aff9 100644 --- a/backtracking/generate_parenthesis.py +++ b/backtracking/generate_parenthesis.py @@ -1,50 +1,51 @@ """ -Given 'n' Pairs of parenthesis, -this program generates all combinations of parenthesis -Example, n=3 : -[ - "((()))", - "(()())", - "(())()", - "()(())", - "()()()" -] -This problem is solved using Backtracking +Given, 'n' pairs of parenthesis, +this program will generate all combinations of valid parenthesis """ - - -def solve(op, open, close, ans) -> int: - if open == 0 and close == 0: - ans.append(op) - return - if open == close: - op1 = op - op1 += "(" - solve(op1, open - 1, close, ans) - elif open == 0: - op1 = op - op1 += ")" - solve(op1, open, close - 1, ans) - elif close == 0: - op1 = op - op1 += "(" - solve(op1, open - 1, close, ans) +def solve(op : str,open : int ,close : int , ans : list[str]) -> int : + if(open == 0 and close == 0): + ans.append(op) + return + if(open == close): + op1 : str = op + op1+=('(') + solve(op1, open-1, close, ans) + elif(open == 0): + op1 : str = op + op1+=(')') + solve(op1, open, close-1, ans) + elif(close == 0): + op1 : str= op + op1+=('(') + solve(op1, open-1, close, ans) else: - op1 = op - op2 = op - op1 += "(" - op2 += ")" - solve(op1, open - 1, close, ans) - solve(op2, open, close - 1, ans) + op1 : str = op + op2 : str = op + op1+=('(') + op2+=(')') + solve(op1, open-1, close, ans) + solve(op2, open, close-1, ans) + +def generate_parenthesis(n : int) -> list[str] : + """ + >>> generate_parenthesis(3) + ['((()))', '(()())', '(())()', '()(())', '()()()'] + >>> generate_parenthesis(4) + ['(((())))', '((()()))', '((())())', '((()))()', '(()(()))', '(()()())', '(()())()', '(())(())', '(())()()', '()((()))', '()(()())', '()(())()', '()()(())', '()()()()'] + >>> generate_parenthesis(5) + ['((((()))))', '(((()())))', '(((())()))', '(((()))())', '(((())))()', '((()(())))', '((()()()))', '((()())())', '((()()))()', '((())(()))', '((())()())', '((())())()', '((()))(())', '((()))()()', '(()((())))', '(()(()()))', '(()(())())', '(()(()))()', '(()()(()))', '(()()()())', '(()()())()', '(()())(())', '(()())()()', '(())((()))', '(())(()())', '(())(())()', '(())()(())', '(())()()()', '()(((())))', '()((()()))', '()((())())', '()((()))()', '()(()(()))', '()(()()())', '()(()())()', '()(())(())', '()(())()()', '()()((()))', '()()(()())', '()()(())()', '()()()(())', '()()()()()'] + """ + open : int = n + close : int = n + ans : list[str]=[] + op : str = "" + solve(op, open, close, ans) + return ans + +if __name__ == "__main__": + import doctest -def generate_parenthesis(n) -> list[str]: - open = n - close = n - ans = [] - op = "" - solve(op, open, close, ans) - return ans + doctest.testmod() -print(generate_parenthesis(3)) From d6dd070c6a6f6dfb5afd92f4fbab33b804e7a8f5 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 8 Oct 2023 06:04:32 +0000 Subject: [PATCH 09/17] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- backtracking/generate_parenthesis.py | 83 ++++++++++++++-------------- 1 file changed, 42 insertions(+), 41 deletions(-) diff --git a/backtracking/generate_parenthesis.py b/backtracking/generate_parenthesis.py index fd03ea64aff9..93378052d5cd 100644 --- a/backtracking/generate_parenthesis.py +++ b/backtracking/generate_parenthesis.py @@ -1,51 +1,52 @@ """ Given, 'n' pairs of parenthesis, -this program will generate all combinations of valid parenthesis +this program will generate all combinations of valid parenthesis """ -def solve(op : str,open : int ,close : int , ans : list[str]) -> int : - if(open == 0 and close == 0): - ans.append(op) - return - if(open == close): - op1 : str = op - op1+=('(') - solve(op1, open-1, close, ans) - elif(open == 0): - op1 : str = op - op1+=(')') - solve(op1, open, close-1, ans) - elif(close == 0): - op1 : str= op - op1+=('(') - solve(op1, open-1, close, ans) + + +def solve(op: str, open: int, close: int, ans: list[str]) -> int: + if open == 0 and close == 0: + ans.append(op) + return + if open == close: + op1: str = op + op1 += "(" + solve(op1, open - 1, close, ans) + elif open == 0: + op1: str = op + op1 += ")" + solve(op1, open, close - 1, ans) + elif close == 0: + op1: str = op + op1 += "(" + solve(op1, open - 1, close, ans) else: - op1 : str = op - op2 : str = op - op1+=('(') - op2+=(')') - solve(op1, open-1, close, ans) - solve(op2, open, close-1, ans) + op1: str = op + op2: str = op + op1 += "(" + op2 += ")" + solve(op1, open - 1, close, ans) + solve(op2, open, close - 1, ans) + + +def generate_parenthesis(n: int) -> list[str]: + """ + >>> generate_parenthesis(3) + ['((()))', '(()())', '(())()', '()(())', '()()()'] + >>> generate_parenthesis(4) + ['(((())))', '((()()))', '((())())', '((()))()', '(()(()))', '(()()())', '(()())()', '(())(())', '(())()()', '()((()))', '()(()())', '()(())()', '()()(())', '()()()()'] + >>> generate_parenthesis(5) + ['((((()))))', '(((()())))', '(((())()))', '(((()))())', '(((())))()', '((()(())))', '((()()()))', '((()())())', '((()()))()', '((())(()))', '((())()())', '((())())()', '((()))(())', '((()))()()', '(()((())))', '(()(()()))', '(()(())())', '(()(()))()', '(()()(()))', '(()()()())', '(()()())()', '(()())(())', '(()())()()', '(())((()))', '(())(()())', '(())(())()', '(())()(())', '(())()()()', '()(((())))', '()((()()))', '()((())())', '()((()))()', '()(()(()))', '()(()()())', '()(()())()', '()(())(())', '()(())()()', '()()((()))', '()()(()())', '()()(())()', '()()()(())', '()()()()()'] + """ + open: int = n + close: int = n + ans: list[str] = [] + op: str = "" + solve(op, open, close, ans) + return ans -def generate_parenthesis(n : int) -> list[str] : - """ - >>> generate_parenthesis(3) - ['((()))', '(()())', '(())()', '()(())', '()()()'] - >>> generate_parenthesis(4) - ['(((())))', '((()()))', '((())())', '((()))()', '(()(()))', '(()()())', '(()())()', '(())(())', '(())()()', '()((()))', '()(()())', '()(())()', '()()(())', '()()()()'] - >>> generate_parenthesis(5) - ['((((()))))', '(((()())))', '(((())()))', '(((()))())', '(((())))()', '((()(())))', '((()()()))', '((()())())', '((()()))()', '((())(()))', '((())()())', '((())())()', '((()))(())', '((()))()()', '(()((())))', '(()(()()))', '(()(())())', '(()(()))()', '(()()(()))', '(()()()())', '(()()())()', '(()())(())', '(()())()()', '(())((()))', '(())(()())', '(())(())()', '(())()(())', '(())()()()', '()(((())))', '()((()()))', '()((())())', '()((()))()', '()(()(()))', '()(()()())', '()(()())()', '()(())(())', '()(())()()', '()()((()))', '()()(()())', '()()(())()', '()()()(())', '()()()()()'] - """ - open : int = n - close : int = n - ans : list[str]=[] - op : str = "" - solve(op, open, close, ans) - return ans - if __name__ == "__main__": import doctest doctest.testmod() - - From a3efa4f9a13af1b03b564e73cc52709f0541a8d8 Mon Sep 17 00:00:00 2001 From: Jibesh10101011 <114723590+Jibesh10101011@users.noreply.github.com> Date: Sun, 8 Oct 2023 12:05:24 +0530 Subject: [PATCH 10/17] Update generate_parenthesis.py --- backtracking/generate_parenthesis.py | 85 +++++++++++++--------------- 1 file changed, 40 insertions(+), 45 deletions(-) diff --git a/backtracking/generate_parenthesis.py b/backtracking/generate_parenthesis.py index 93378052d5cd..ca4abcfc448b 100644 --- a/backtracking/generate_parenthesis.py +++ b/backtracking/generate_parenthesis.py @@ -1,52 +1,47 @@ -""" -Given, 'n' pairs of parenthesis, -this program will generate all combinations of valid parenthesis -""" - - -def solve(op: str, open: int, close: int, ans: list[str]) -> int: - if open == 0 and close == 0: - ans.append(op) - return - if open == close: - op1: str = op - op1 += "(" - solve(op1, open - 1, close, ans) - elif open == 0: - op1: str = op - op1 += ")" - solve(op1, open, close - 1, ans) - elif close == 0: - op1: str = op - op1 += "(" - solve(op1, open - 1, close, ans) +def solve(op : str,open : int ,close : int , ans : list[str]) -> None: + if(open == 0 and close == 0): + ans.append(op) + return + if(open == close): + op1 : str = op + op1+=('(') + solve(op1, open-1, close, ans) + elif(open == 0): + op1 : str = op + op1+=(')') + solve(op1, open, close-1, ans) + elif(close == 0): + op1 : str= op + op1+=('(') + solve(op1, open-1, close, ans) else: - op1: str = op - op2: str = op - op1 += "(" - op2 += ")" - solve(op1, open - 1, close, ans) - solve(op2, open, close - 1, ans) - - -def generate_parenthesis(n: int) -> list[str]: - """ - >>> generate_parenthesis(3) - ['((()))', '(()())', '(())()', '()(())', '()()()'] - >>> generate_parenthesis(4) - ['(((())))', '((()()))', '((())())', '((()))()', '(()(()))', '(()()())', '(()())()', '(())(())', '(())()()', '()((()))', '()(()())', '()(())()', '()()(())', '()()()()'] - >>> generate_parenthesis(5) - ['((((()))))', '(((()())))', '(((())()))', '(((()))())', '(((())))()', '((()(())))', '((()()()))', '((()())())', '((()()))()', '((())(()))', '((())()())', '((())())()', '((()))(())', '((()))()()', '(()((())))', '(()(()()))', '(()(())())', '(()(()))()', '(()()(()))', '(()()()())', '(()()())()', '(()())(())', '(()())()()', '(())((()))', '(())(()())', '(())(())()', '(())()(())', '(())()()()', '()(((())))', '()((()()))', '()((())())', '()((()))()', '()(()(()))', '()(()()())', '()(()())()', '()(())(())', '()(())()()', '()()((()))', '()()(()())', '()()(())()', '()()()(())', '()()()()()'] - """ - open: int = n - close: int = n - ans: list[str] = [] - op: str = "" - solve(op, open, close, ans) - return ans + op1 : str = op + op2 : str = op + op1+=('(') + op2+=(')') + solve(op1, open-1, close, ans) + solve(op2, open, close-1, ans) +def generate_parenthesis(n : int) -> list[str] : # n = no. of pairs of parenthesis > 0 + """ + >>> generate_parenthesis(3) + ['((()))', '(()())', '(())()', '()(())', '()()()'] + >>> generate_parenthesis(4) + ['(((())))', '((()()))', '((())())', '((()))()', '(()(()))', '(()()())', '(()())()', '(())(())', '(())()()', '()((()))', '()(()())', '()(())()', '()()(())', '()()()()'] + >>> generate_parenthesis(5) + ['((((()))))', '(((()())))', '(((())()))', '(((()))())', '(((())))()', '((()(())))', '((()()()))', '((()())())', '((()()))()', '((())(()))', '((())()())', '((())())()', '((()))(())', '((()))()()', '(()((())))', '(()(()()))', '(()(())())', '(()(()))()', '(()()(()))', '(()()()())', '(()()())()', '(()())(())', '(()())()()', '(())((()))', '(())(()())', '(())(())()', '(())()(())', '(())()()()', '()(((())))', '()((()()))', '()((())())', '()((()))()', '()(()(()))', '()(()()())', '()(()())()', '()(())(())', '()(())()()', '()()((()))', '()()(()())', '()()(())()', '()()()(())', '()()()()()'] + """ + open : int = n + close : int = n + ans : list[str]=[] + op : str = "" + solve(op, open, close, ans) + if(n>0): + return ans + if __name__ == "__main__": import doctest doctest.testmod() + From 4aaeba721fadd42f51c1a2c42f5b19b1748796d0 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 8 Oct 2023 06:35:53 +0000 Subject: [PATCH 11/17] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- backtracking/generate_parenthesis.py | 80 ++++++++++++++-------------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/backtracking/generate_parenthesis.py b/backtracking/generate_parenthesis.py index ca4abcfc448b..4983ea4835cd 100644 --- a/backtracking/generate_parenthesis.py +++ b/backtracking/generate_parenthesis.py @@ -1,47 +1,47 @@ -def solve(op : str,open : int ,close : int , ans : list[str]) -> None: - if(open == 0 and close == 0): - ans.append(op) - return - if(open == close): - op1 : str = op - op1+=('(') - solve(op1, open-1, close, ans) - elif(open == 0): - op1 : str = op - op1+=(')') - solve(op1, open, close-1, ans) - elif(close == 0): - op1 : str= op - op1+=('(') - solve(op1, open-1, close, ans) +def solve(op: str, open: int, close: int, ans: list[str]) -> None: + if open == 0 and close == 0: + ans.append(op) + return + if open == close: + op1: str = op + op1 += "(" + solve(op1, open - 1, close, ans) + elif open == 0: + op1: str = op + op1 += ")" + solve(op1, open, close - 1, ans) + elif close == 0: + op1: str = op + op1 += "(" + solve(op1, open - 1, close, ans) else: - op1 : str = op - op2 : str = op - op1+=('(') - op2+=(')') - solve(op1, open-1, close, ans) - solve(op2, open, close-1, ans) + op1: str = op + op2: str = op + op1 += "(" + op2 += ")" + solve(op1, open - 1, close, ans) + solve(op2, open, close - 1, ans) + + +def generate_parenthesis(n: int) -> list[str]: # n = no. of pairs of parenthesis > 0 + """ + >>> generate_parenthesis(3) + ['((()))', '(()())', '(())()', '()(())', '()()()'] + >>> generate_parenthesis(4) + ['(((())))', '((()()))', '((())())', '((()))()', '(()(()))', '(()()())', '(()())()', '(())(())', '(())()()', '()((()))', '()(()())', '()(())()', '()()(())', '()()()()'] + >>> generate_parenthesis(5) + ['((((()))))', '(((()())))', '(((())()))', '(((()))())', '(((())))()', '((()(())))', '((()()()))', '((()())())', '((()()))()', '((())(()))', '((())()())', '((())())()', '((()))(())', '((()))()()', '(()((())))', '(()(()()))', '(()(())())', '(()(()))()', '(()()(()))', '(()()()())', '(()()())()', '(()())(())', '(()())()()', '(())((()))', '(())(()())', '(())(())()', '(())()(())', '(())()()()', '()(((())))', '()((()()))', '()((())())', '()((()))()', '()(()(()))', '()(()()())', '()(()())()', '()(())(())', '()(())()()', '()()((()))', '()()(()())', '()()(())()', '()()()(())', '()()()()()'] + """ + open: int = n + close: int = n + ans: list[str] = [] + op: str = "" + solve(op, open, close, ans) + if n > 0: + return ans -def generate_parenthesis(n : int) -> list[str] : # n = no. of pairs of parenthesis > 0 - """ - >>> generate_parenthesis(3) - ['((()))', '(()())', '(())()', '()(())', '()()()'] - >>> generate_parenthesis(4) - ['(((())))', '((()()))', '((())())', '((()))()', '(()(()))', '(()()())', '(()())()', '(())(())', '(())()()', '()((()))', '()(()())', '()(())()', '()()(())', '()()()()'] - >>> generate_parenthesis(5) - ['((((()))))', '(((()())))', '(((())()))', '(((()))())', '(((())))()', '((()(())))', '((()()()))', '((()())())', '((()()))()', '((())(()))', '((())()())', '((())())()', '((()))(())', '((()))()()', '(()((())))', '(()(()()))', '(()(())())', '(()(()))()', '(()()(()))', '(()()()())', '(()()())()', '(()())(())', '(()())()()', '(())((()))', '(())(()())', '(())(())()', '(())()(())', '(())()()()', '()(((())))', '()((()()))', '()((())())', '()((()))()', '()(()(()))', '()(()()())', '()(()())()', '()(())(())', '()(())()()', '()()((()))', '()()(()())', '()()(())()', '()()()(())', '()()()()()'] - """ - open : int = n - close : int = n - ans : list[str]=[] - op : str = "" - solve(op, open, close, ans) - if(n>0): - return ans - if __name__ == "__main__": import doctest doctest.testmod() - From e0c1e185145fafca986a9f26dab1cd4c737bbf1a Mon Sep 17 00:00:00 2001 From: Jibesh10101011 <114723590+Jibesh10101011@users.noreply.github.com> Date: Sun, 8 Oct 2023 12:08:30 +0530 Subject: [PATCH 12/17] Update generate_parenthesis.py --- backtracking/generate_parenthesis.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/backtracking/generate_parenthesis.py b/backtracking/generate_parenthesis.py index 4983ea4835cd..0707dbc2250c 100644 --- a/backtracking/generate_parenthesis.py +++ b/backtracking/generate_parenthesis.py @@ -43,5 +43,4 @@ def generate_parenthesis(n: int) -> list[str]: # n = no. of pairs of parenthesi if __name__ == "__main__": import doctest - - doctest.testmod() +doctest.testmod() From 43cb929d06fb10af395ccd4552dc4dad92297373 Mon Sep 17 00:00:00 2001 From: Jibesh10101011 <114723590+Jibesh10101011@users.noreply.github.com> Date: Sun, 8 Oct 2023 12:24:51 +0530 Subject: [PATCH 13/17] Update generate_parenthesis.py --- backtracking/generate_parenthesis.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/backtracking/generate_parenthesis.py b/backtracking/generate_parenthesis.py index 0707dbc2250c..5919260b3e3a 100644 --- a/backtracking/generate_parenthesis.py +++ b/backtracking/generate_parenthesis.py @@ -1,3 +1,4 @@ +import doctest def solve(op: str, open: int, close: int, ans: list[str]) -> None: if open == 0 and close == 0: ans.append(op) @@ -39,8 +40,5 @@ def generate_parenthesis(n: int) -> list[str]: # n = no. of pairs of parenthesi solve(op, open, close, ans) if n > 0: return ans - - -if __name__ == "__main__": - import doctest + doctest.testmod() From 5cacd540808734a9bfb1945ed5f99091c7ed3417 Mon Sep 17 00:00:00 2001 From: Jibesh10101011 <114723590+Jibesh10101011@users.noreply.github.com> Date: Sun, 8 Oct 2023 12:25:00 +0530 Subject: [PATCH 14/17] Update generate_parenthesis.py --- backtracking/generate_parenthesis.py | 1 + 1 file changed, 1 insertion(+) diff --git a/backtracking/generate_parenthesis.py b/backtracking/generate_parenthesis.py index 5919260b3e3a..bc7007f31031 100644 --- a/backtracking/generate_parenthesis.py +++ b/backtracking/generate_parenthesis.py @@ -1,4 +1,5 @@ import doctest + def solve(op: str, open: int, close: int, ans: list[str]) -> None: if open == 0 and close == 0: ans.append(op) From 1fa5f0506c93b2a4a30932e5f7850e66a8e12d82 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 8 Oct 2023 06:55:50 +0000 Subject: [PATCH 15/17] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- backtracking/generate_parenthesis.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/backtracking/generate_parenthesis.py b/backtracking/generate_parenthesis.py index bc7007f31031..86e93bb04f62 100644 --- a/backtracking/generate_parenthesis.py +++ b/backtracking/generate_parenthesis.py @@ -1,5 +1,6 @@ import doctest + def solve(op: str, open: int, close: int, ans: list[str]) -> None: if open == 0 and close == 0: ans.append(op) @@ -41,5 +42,6 @@ def generate_parenthesis(n: int) -> list[str]: # n = no. of pairs of parenthesi solve(op, open, close, ans) if n > 0: return ans - + + doctest.testmod() From 78d25036b73e9c0e991b3d77ba37c37f3bacbc21 Mon Sep 17 00:00:00 2001 From: Jibesh10101011 <114723590+Jibesh10101011@users.noreply.github.com> Date: Sun, 8 Oct 2023 14:39:55 +0530 Subject: [PATCH 16/17] Update generate_parenthesis.py --- backtracking/generate_parenthesis.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/backtracking/generate_parenthesis.py b/backtracking/generate_parenthesis.py index 86e93bb04f62..71d310ac27ee 100644 --- a/backtracking/generate_parenthesis.py +++ b/backtracking/generate_parenthesis.py @@ -1,6 +1,5 @@ import doctest - def solve(op: str, open: int, close: int, ans: list[str]) -> None: if open == 0 and close == 0: ans.append(op) @@ -32,8 +31,6 @@ def generate_parenthesis(n: int) -> list[str]: # n = no. of pairs of parenthesi ['((()))', '(()())', '(())()', '()(())', '()()()'] >>> generate_parenthesis(4) ['(((())))', '((()()))', '((())())', '((()))()', '(()(()))', '(()()())', '(()())()', '(())(())', '(())()()', '()((()))', '()(()())', '()(())()', '()()(())', '()()()()'] - >>> generate_parenthesis(5) - ['((((()))))', '(((()())))', '(((())()))', '(((()))())', '(((())))()', '((()(())))', '((()()()))', '((()())())', '((()()))()', '((())(()))', '((())()())', '((())())()', '((()))(())', '((()))()()', '(()((())))', '(()(()()))', '(()(())())', '(()(()))()', '(()()(()))', '(()()()())', '(()()())()', '(()())(())', '(()())()()', '(())((()))', '(())(()())', '(())(())()', '(())()(())', '(())()()()', '()(((())))', '()((()()))', '()((())())', '()((()))()', '()(()(()))', '()(()()())', '()(()())()', '()(())(())', '()(())()()', '()()((()))', '()()(()())', '()()(())()', '()()()(())', '()()()()()'] """ open: int = n close: int = n @@ -43,5 +40,4 @@ def generate_parenthesis(n: int) -> list[str]: # n = no. of pairs of parenthesi if n > 0: return ans - doctest.testmod() From e5e0efa4858d1ce9768e45769086a0d6ed222383 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 8 Oct 2023 09:10:29 +0000 Subject: [PATCH 17/17] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- backtracking/generate_parenthesis.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/backtracking/generate_parenthesis.py b/backtracking/generate_parenthesis.py index 71d310ac27ee..be6971569312 100644 --- a/backtracking/generate_parenthesis.py +++ b/backtracking/generate_parenthesis.py @@ -1,5 +1,6 @@ import doctest + def solve(op: str, open: int, close: int, ans: list[str]) -> None: if open == 0 and close == 0: ans.append(op) @@ -40,4 +41,5 @@ def generate_parenthesis(n: int) -> list[str]: # n = no. of pairs of parenthesi if n > 0: return ans + doctest.testmod()