From 2e75b2be90e5d40ad2c83bfb862b8e1125db2053 Mon Sep 17 00:00:00 2001 From: Wen <409053122@qq.com> Date: Tue, 22 Nov 2022 09:40:41 +0800 Subject: [PATCH] =?UTF-8?q?[22]=20=E6=8B=AC=E5=8F=B7=E7=94=9F=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/leecode/22.括号生成.java | 52 ++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/leecode/22.括号生成.java diff --git a/src/leecode/22.括号生成.java b/src/leecode/22.括号生成.java new file mode 100644 index 0000000..91e4114 --- /dev/null +++ b/src/leecode/22.括号生成.java @@ -0,0 +1,52 @@ +package leecode;/* + * @lc app=leetcode.cn id=22 lang=java + * + * [22] 括号生成 + */ + +import java.util.ArrayList; +import java.util.List; +import java.util.Stack; + +// @lc code=start +class No22 { + public List generateParenthesis(int n) { + Stack stack = new Stack<>(); + List result = new ArrayList<>(); + boolean selectLeft = true; + StringBuilder create = new StringBuilder(); + select(stack, result, n-1, n, selectLeft, create.append("(")); + return result; + } + + private void select(Stack stack, List result, int left, int right, boolean selectLeft, StringBuilder create) { + if (left == 0 && right == 0) { + if (stack.isEmpty() || !stack.pop().equals("(")) { + return; + } + result.add(create.toString()); + return; + } + if (left < 0 || right < 0) { + return; + } + if (selectLeft) { + stack.push("("); + } else { + if (stack.isEmpty() || !stack.pop().equals("(")) { + return; + } + } + select((Stack) stack.clone(), result, left - 1, right, true, create.append("(")); + create.delete(create.length() - 1, create.length()); + select((Stack) stack.clone(), result, left, right-1, false, create.append(")")); + create.delete(create.length() - 1, create.length()); + } + + public static void main(String[] args) { + No22 solution = new No22(); + System.out.println(solution.generateParenthesis(2)); + } +} +// @lc code=end +