题目描述
题目链接:22. 括号生成
数字 n
代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例1:
1 2
| 输入:n = 3 输出:["((()))","(()())","(())()","()(())","()()()"]
|
示例2:
提示:
我的题解
方法一:回溯+剪枝
思路
回溯法枚举所有情况,其中根据条件进行剪枝:当已加入的右括号大于左括号,这时不能够构成一个有效的括号
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| class Solution { public List<String> generateParenthesis(int n) { List<String> result = new ArrayList<>(); StringBuilder sb = new StringBuilder(); dfs(result, sb, n, n); return result; }
private void dfs(List<String> result, StringBuilder sb, int left, int right) { if (left > right) { return; } if (left == 0 && right == 0) { result.add(sb.toString()); return; } if (left > 0) { sb.append("("); dfs(result, sb, left - 1, right); sb.deleteCharAt(sb.length() - 1); } if (right > 0) { sb.append(")"); dfs(result, sb, left, right - 1); sb.deleteCharAt(sb.length() - 1); } } }
|
结果
执行用时:1 ms, 在所有 Java 提交中击败了76.53%的用户
内存消耗:41.2 MB, 在所有 Java 提交中击败了92.68%的用户