From f2810dc3859c97a9c3d9fe73b26bc4a4f917a723 Mon Sep 17 00:00:00 2001 From: shining-ai Date: Wed, 17 Apr 2024 18:01:33 +0000 Subject: [PATCH 1/3] =?UTF-8?q?=E3=80=90Arai60=E3=80=9153=E5=95=8F?= =?UTF-8?q?=E7=9B=AE=2022.=20Generate=20Parentheses?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../53_22_Generate Parentheses/level_1.py | 21 +++++++++++++++++++ .../53_22_Generate Parentheses/level_2.py | 16 ++++++++++++++ .../53_22_Generate Parentheses/level_3.py | 14 +++++++++++++ 3 files changed, 51 insertions(+) create mode 100644 arai60/50-53_Greedy_Backtracking/53_22_Generate Parentheses/level_1.py create mode 100644 arai60/50-53_Greedy_Backtracking/53_22_Generate Parentheses/level_2.py create mode 100644 arai60/50-53_Greedy_Backtracking/53_22_Generate Parentheses/level_3.py diff --git a/arai60/50-53_Greedy_Backtracking/53_22_Generate Parentheses/level_1.py b/arai60/50-53_Greedy_Backtracking/53_22_Generate Parentheses/level_1.py new file mode 100644 index 0000000..6217c51 --- /dev/null +++ b/arai60/50-53_Greedy_Backtracking/53_22_Generate Parentheses/level_1.py @@ -0,0 +1,21 @@ +# backtracking +class Solution: + def generateParenthesis(self, n: int) -> List[str]: + def make_combination(current): + if remain["("] > remain[")"]: + return + if remain["("] < 0: + return + if remain[")"] == 0: + parentheses.append(current) + return + for bracket in brackets: + remain[bracket] -= 1 + make_combination(current + bracket) + remain[bracket] += 1 + + brackets = ["(", ")"] + remain = {"(": n, ")": n} + parentheses = [] + make_combination("") + return parentheses diff --git a/arai60/50-53_Greedy_Backtracking/53_22_Generate Parentheses/level_2.py b/arai60/50-53_Greedy_Backtracking/53_22_Generate Parentheses/level_2.py new file mode 100644 index 0000000..c21b82f --- /dev/null +++ b/arai60/50-53_Greedy_Backtracking/53_22_Generate Parentheses/level_2.py @@ -0,0 +1,16 @@ +# backtracking +# 括弧の数を引数にする +class Solution: + def generateParenthesis(self, n: int) -> List[str]: + def make_combination(current, remain_left, remain_right): + if remain_left == 0 and remain_right == 0: + parentheses.append(current) + return + if 0 < remain_left: + make_combination(current + "(", remain_left - 1, remain_right) + if remain_left < remain_right: + make_combination(current + ")", remain_left, remain_right - 1) + + parentheses = [] + make_combination("", n, n) + return parentheses diff --git a/arai60/50-53_Greedy_Backtracking/53_22_Generate Parentheses/level_3.py b/arai60/50-53_Greedy_Backtracking/53_22_Generate Parentheses/level_3.py new file mode 100644 index 0000000..f5a39b6 --- /dev/null +++ b/arai60/50-53_Greedy_Backtracking/53_22_Generate Parentheses/level_3.py @@ -0,0 +1,14 @@ +class Solution: + def generateParenthesis(self, n: int) -> List[str]: + def make_combination(current, remain_left, remain_right): + if remain_left == 0 and remain_right == 0: + parentheses.append(current) + return + if 0 < remain_left: + make_combination(current + "(", remain_left - 1, remain_right) + if remain_left < remain_right: + make_combination(current + ")", remain_left, remain_right - 1) + + parentheses = [] + make_combination("", n, n) + return parentheses From a69a526c8eeea8aa2cb445d893d37feb7f177051 Mon Sep 17 00:00:00 2001 From: shining-ai Date: Thu, 18 Apr 2024 14:38:27 +0000 Subject: [PATCH 2/3] =?UTF-8?q?loop=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../53_22_Generate Parentheses/level_4.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 arai60/50-53_Greedy_Backtracking/53_22_Generate Parentheses/level_4.py diff --git a/arai60/50-53_Greedy_Backtracking/53_22_Generate Parentheses/level_4.py b/arai60/50-53_Greedy_Backtracking/53_22_Generate Parentheses/level_4.py new file mode 100644 index 0000000..1b639c2 --- /dev/null +++ b/arai60/50-53_Greedy_Backtracking/53_22_Generate Parentheses/level_4.py @@ -0,0 +1,15 @@ +class Solution: + def generateParenthesis(self, n: int) -> List[str]: + stack = [("", n, n)] + parentheses = [] + while stack: + current, remain_left, remain_right = stack.pop() + if remain_left == 0 and remain_right == 0: + parentheses.append(current) + continue + if 0 < remain_left: + stack.append((current + "(", remain_left - 1, remain_right)) + if remain_left < remain_right: + stack.append((current + ")", remain_left, remain_right - 1)) + + return parentheses From 87b5d6f9e297932d9cb14c345f8c2c95e6a77c70 Mon Sep 17 00:00:00 2001 From: shining-ai Date: Thu, 18 Apr 2024 14:47:38 +0000 Subject: [PATCH 3/3] =?UTF-8?q?=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88?= =?UTF-8?q?=E3=81=AE=E5=86=85=E5=AE=B9=E3=82=92=E5=8F=8D=E6=98=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../53_22_Generate Parentheses/level_4.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/arai60/50-53_Greedy_Backtracking/53_22_Generate Parentheses/level_4.py b/arai60/50-53_Greedy_Backtracking/53_22_Generate Parentheses/level_4.py index 1b639c2..c04cfd2 100644 --- a/arai60/50-53_Greedy_Backtracking/53_22_Generate Parentheses/level_4.py +++ b/arai60/50-53_Greedy_Backtracking/53_22_Generate Parentheses/level_4.py @@ -13,3 +13,22 @@ def generateParenthesis(self, n: int) -> List[str]: stack.append((current + ")", remain_left, remain_right - 1)) return parentheses + + +# backtracking +# 関数内で使う変数は先に定義する +class Solution: + def generateParenthesis(self, n: int) -> List[str]: + parentheses = [] + + def make_combination(current, remain_left, remain_right): + if remain_left == 0 and remain_right == 0: + parentheses.append(current) + return + if 0 < remain_left: + make_combination(current + "(", remain_left - 1, remain_right) + if remain_left < remain_right: + make_combination(current + ")", remain_left, remain_right - 1) + + make_combination("", n, n) + return parentheses