题目描述
数字n
代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例 1:
1 2
| 输入:n = 3 输出:["((()))","(()())","(())()","()(())","()()()"]
|
示例 2:
提示:
解法
- 回溯,深度优先搜索
- 如果左括号数量不大于 n,我们可以放一个左括号。
- 如果右括号数量小于左括号的数量,我们可以放一个右括号。
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| import java.util.ArrayList; import java.util.List;
class Solution { public List<String> generateParenthesis(int n) { List <String> ans =new ArrayList<>(); backtrack(ans, new StringBuffer(), 0, 0, n); return ans; }
public void backtrack(List<String> ans,StringBuffer cur,int left,int right,int max){ if(cur.length()==max*2){ ans.add(cur.toString()); return; } if(left<max){ cur.append('('); backtrack(ans, cur, left+1, right, max); cur.deleteCharAt(cur.length()-1); } if (right<left){ cur.append(')'); backtrack(ans, cur, left, right+1, max); cur.deleteCharAt(cur.length()-1); } } }
|
$$
O(\dfrac{4^n}{\sqrt{n}})
$$
来源:力扣(LeetCode)
链接:22. 括号生成 - 力扣(LeetCode) (leetcode-cn.com)