From f5f5dec9a6686c5c84ff805ad5418cf4280ff66c Mon Sep 17 00:00:00 2001 From: kosuri-indu Date: Fri, 6 Oct 2023 23:07:57 +0530 Subject: [PATCH 01/11] to add generate_par.py --- backtracking/generate_parentheses.py | 50 ++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 backtracking/generate_parentheses.py diff --git a/backtracking/generate_parentheses.py b/backtracking/generate_parentheses.py new file mode 100644 index 000000000000..a2d7b5131557 --- /dev/null +++ b/backtracking/generate_parentheses.py @@ -0,0 +1,50 @@ +""" +Given 'n' pairs of parentheses, +this program generates all combinations of parentheses. +Example, n = 3 : +[ + "((()))", + "(()())", + "(())()", + "()(())", + "()()()" +] +This problem can be solved using the concept of "BACKTRACKING". +By adding an open parenthesis to the solution and +recursively add more till we get 'n' open parentheses. +Then we start adding close parentheses until the solution is valid +(open parenthesis is closed). +If we reach a point where we can not add more parentheses to the solution, +we backtrack to the previous step and try a different path. +""" + +def generate_parentheses(number : int = 0) -> list: + """ + >>> generate_parentheses(3) + ['((()))', '(()())', '(())()', '()(())', '()()()'] + + >>> generate_parentheses(1) + ['()'] + + >>> generate_parentheses(0) + [''] + """ + def backtrack(x : str = "",left : int = 0,right : int = 0) -> None: + + if len(x) == 2 * number: + result.append(x) + return + if left < number: + backtrack(x + "(", left + 1, right) + if right < left: + backtrack(x + ")", left, right + 1) + + result = [] + backtrack() + return result + +if __name__ == "__main__": + import doctest + + doctest.testmod() + print(f"{generate_parentheses()}") \ No newline at end of file From c66c652e12e2eb14414cc4d965fd17e4c777f3d9 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 6 Oct 2023 17:42:09 +0000 Subject: [PATCH 02/11] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- backtracking/generate_parentheses.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/backtracking/generate_parentheses.py b/backtracking/generate_parentheses.py index a2d7b5131557..f62696db54ff 100644 --- a/backtracking/generate_parentheses.py +++ b/backtracking/generate_parentheses.py @@ -18,7 +18,8 @@ we backtrack to the previous step and try a different path. """ -def generate_parentheses(number : int = 0) -> list: + +def generate_parentheses(number: int = 0) -> list: """ >>> generate_parentheses(3) ['((()))', '(()())', '(())()', '()(())', '()()()'] @@ -29,8 +30,8 @@ def generate_parentheses(number : int = 0) -> list: >>> generate_parentheses(0) [''] """ - def backtrack(x : str = "",left : int = 0,right : int = 0) -> None: + def backtrack(x: str = "", left: int = 0, right: int = 0) -> None: if len(x) == 2 * number: result.append(x) return @@ -43,8 +44,9 @@ def backtrack(x : str = "",left : int = 0,right : int = 0) -> None: backtrack() return result + if __name__ == "__main__": import doctest doctest.testmod() - print(f"{generate_parentheses()}") \ No newline at end of file + print(f"{generate_parentheses()}") From 208d7802f51e0b8dcc5f90b584ae8bd1bfe6a3f8 Mon Sep 17 00:00:00 2001 From: kosuri-indu Date: Fri, 6 Oct 2023 23:23:55 +0530 Subject: [PATCH 03/11] changes --- backtracking/generate_parentheses.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/backtracking/generate_parentheses.py b/backtracking/generate_parentheses.py index a2d7b5131557..eb7562e251a5 100644 --- a/backtracking/generate_parentheses.py +++ b/backtracking/generate_parentheses.py @@ -29,15 +29,15 @@ def generate_parentheses(number : int = 0) -> list: >>> generate_parentheses(0) [''] """ - def backtrack(x : str = "",left : int = 0,right : int = 0) -> None: + def backtrack(parantheses : str = "",left : int = 0,right : int = 0) -> None: - if len(x) == 2 * number: - result.append(x) + if len(parantheses) == 2 * number: + result.append(parantheses) return if left < number: - backtrack(x + "(", left + 1, right) + backtrack(parantheses + "(", left + 1, right) if right < left: - backtrack(x + ")", left, right + 1) + backtrack(parantheses + ")", left, right + 1) result = [] backtrack() From 48f81ebe87b3875fb0e86a2a1a9c2400491a8d23 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 6 Oct 2023 17:57:31 +0000 Subject: [PATCH 04/11] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- backtracking/generate_parentheses.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backtracking/generate_parentheses.py b/backtracking/generate_parentheses.py index c0a11bcaa347..d31b80c8ad72 100644 --- a/backtracking/generate_parentheses.py +++ b/backtracking/generate_parentheses.py @@ -30,8 +30,8 @@ def generate_parentheses(number: int = 0) -> list: >>> generate_parentheses(0) [''] """ - def backtrack(x : str = "",left : int = 0,right : int = 0) -> None: + def backtrack(x: str = "", left: int = 0, right: int = 0) -> None: if len(x) == 2 * number: result.append(x) return From 075be7b40bd34da80e787b7179290bfa4f0d1161 Mon Sep 17 00:00:00 2001 From: kosuri-indu Date: Fri, 6 Oct 2023 23:29:24 +0530 Subject: [PATCH 05/11] changes --- backtracking/generate_parentheses.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backtracking/generate_parentheses.py b/backtracking/generate_parentheses.py index c0a11bcaa347..d4627212db8f 100644 --- a/backtracking/generate_parentheses.py +++ b/backtracking/generate_parentheses.py @@ -30,10 +30,10 @@ def generate_parentheses(number: int = 0) -> list: >>> generate_parentheses(0) [''] """ - def backtrack(x : str = "",left : int = 0,right : int = 0) -> None: + def backtrack(parantheses : str = "",left : int = 0,right : int = 0) -> None: - if len(x) == 2 * number: - result.append(x) + if len(parantheses) == 2 * number: + result.append(parantheses) return if left < number: backtrack(parantheses + "(", left + 1, right) From 6ff0a016b303bdd6000e6e727d4b9a85ac6b31a7 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 6 Oct 2023 18:00:48 +0000 Subject: [PATCH 06/11] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- backtracking/generate_parentheses.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backtracking/generate_parentheses.py b/backtracking/generate_parentheses.py index c0a11bcaa347..d31b80c8ad72 100644 --- a/backtracking/generate_parentheses.py +++ b/backtracking/generate_parentheses.py @@ -30,8 +30,8 @@ def generate_parentheses(number: int = 0) -> list: >>> generate_parentheses(0) [''] """ - def backtrack(x : str = "",left : int = 0,right : int = 0) -> None: + def backtrack(x: str = "", left: int = 0, right: int = 0) -> None: if len(x) == 2 * number: result.append(x) return From 3d2c1a0c45d93ed2449b94720d5f25ad54acc8b9 Mon Sep 17 00:00:00 2001 From: kosuri-indu Date: Fri, 6 Oct 2023 23:31:12 +0530 Subject: [PATCH 07/11] changes --- backtracking/generate_parentheses.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backtracking/generate_parentheses.py b/backtracking/generate_parentheses.py index c0a11bcaa347..d4627212db8f 100644 --- a/backtracking/generate_parentheses.py +++ b/backtracking/generate_parentheses.py @@ -30,10 +30,10 @@ def generate_parentheses(number: int = 0) -> list: >>> generate_parentheses(0) [''] """ - def backtrack(x : str = "",left : int = 0,right : int = 0) -> None: + def backtrack(parantheses : str = "",left : int = 0,right : int = 0) -> None: - if len(x) == 2 * number: - result.append(x) + if len(parantheses) == 2 * number: + result.append(parantheses) return if left < number: backtrack(parantheses + "(", left + 1, right) From d0936155aa4ff9691cb188f1382de2ea2062bc19 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 6 Oct 2023 18:04:44 +0000 Subject: [PATCH 08/11] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- backtracking/generate_parentheses.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/backtracking/generate_parentheses.py b/backtracking/generate_parentheses.py index 51e75b2ba286..8e86b5694e14 100644 --- a/backtracking/generate_parentheses.py +++ b/backtracking/generate_parentheses.py @@ -18,6 +18,7 @@ we backtrack to the previous step and try a different path. """ + def generate_parentheses(number: int = 0) -> list: """ >>> generate_parentheses(3) @@ -29,8 +30,8 @@ def generate_parentheses(number: int = 0) -> list: >>> generate_parentheses(0) [''] """ - def backtrack(parantheses : str = "",left : int = 0,right : int = 0) -> None: + def backtrack(parantheses: str = "", left: int = 0, right: int = 0) -> None: if len(parantheses) == 2 * number: result.append(parantheses) return @@ -43,6 +44,7 @@ def backtrack(parantheses : str = "",left : int = 0,right : int = 0) -> None: backtrack() return result + if __name__ == "__main__": import doctest From 8d60c2b7e452b8d3f0c19900d315839a5966945e Mon Sep 17 00:00:00 2001 From: kosuri-indu Date: Fri, 6 Oct 2023 23:39:24 +0530 Subject: [PATCH 09/11] changes --- backtracking/generate_parentheses.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/backtracking/generate_parentheses.py b/backtracking/generate_parentheses.py index 51e75b2ba286..5f33f197c672 100644 --- a/backtracking/generate_parentheses.py +++ b/backtracking/generate_parentheses.py @@ -18,7 +18,7 @@ we backtrack to the previous step and try a different path. """ -def generate_parentheses(number: int = 0) -> list: +def generate_parentheses(number: int = 0) -> list[str]: """ >>> generate_parentheses(3) ['((()))', '(()())', '(())()', '()(())', '()()()'] @@ -29,15 +29,15 @@ def generate_parentheses(number: int = 0) -> list: >>> generate_parentheses(0) [''] """ - def backtrack(parantheses : str = "",left : int = 0,right : int = 0) -> None: + def backtrack(parentheses : str = "",left : int = 0,right : int = 0) -> None: - if len(parantheses) == 2 * number: - result.append(parantheses) + if len(parentheses) == 2 * number: + result.append(parentheses) return if left < number: - backtrack(parantheses + "(", left + 1, right) + backtrack(parentheses + "(", left + 1, right) if right < left: - backtrack(parantheses + ")", left, right + 1) + backtrack(parentheses + ")", left, right + 1) result = [] backtrack() From e0dd0eefe6d17ecc5cb95942bd678096118689cd Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 6 Oct 2023 18:12:16 +0000 Subject: [PATCH 10/11] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- backtracking/generate_parentheses.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/backtracking/generate_parentheses.py b/backtracking/generate_parentheses.py index 5f33f197c672..2a1c59e133f2 100644 --- a/backtracking/generate_parentheses.py +++ b/backtracking/generate_parentheses.py @@ -18,6 +18,7 @@ we backtrack to the previous step and try a different path. """ + def generate_parentheses(number: int = 0) -> list[str]: """ >>> generate_parentheses(3) @@ -29,8 +30,8 @@ def generate_parentheses(number: int = 0) -> list[str]: >>> generate_parentheses(0) [''] """ - def backtrack(parentheses : str = "",left : int = 0,right : int = 0) -> None: + def backtrack(parentheses: str = "", left: int = 0, right: int = 0) -> None: if len(parentheses) == 2 * number: result.append(parentheses) return @@ -43,6 +44,7 @@ def backtrack(parentheses : str = "",left : int = 0,right : int = 0) -> None: backtrack() return result + if __name__ == "__main__": import doctest From 13e3ad062d180fb341d976c35adda01e0ddbab84 Mon Sep 17 00:00:00 2001 From: kosuri-indu Date: Fri, 6 Oct 2023 23:49:34 +0530 Subject: [PATCH 11/11] changes --- backtracking/generate_parentheses.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/backtracking/generate_parentheses.py b/backtracking/generate_parentheses.py index 2a1c59e133f2..b425230361bf 100644 --- a/backtracking/generate_parentheses.py +++ b/backtracking/generate_parentheses.py @@ -32,6 +32,10 @@ def generate_parentheses(number: int = 0) -> list[str]: """ def backtrack(parentheses: str = "", left: int = 0, right: int = 0) -> None: + """ + backtrack() + >>> None + """ if len(parentheses) == 2 * number: result.append(parentheses) return @@ -40,7 +44,7 @@ def backtrack(parentheses: str = "", left: int = 0, right: int = 0) -> None: if right < left: backtrack(parentheses + ")", left, right + 1) - result = [] + result: list[str] = [] backtrack() return result