给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n = 3,生成结果为:
[ "((()))", "(()())", "(())()", "()(())", "()()()" ] 题解 借鉴(抄的,哈哈)的回溯法
只有在我们知道序列仍然保持有效时才添加 '('
or '),
我们可以通过跟踪到前为止放置的左括号和右括号的数目来做到这一点,
如果我们还剩一个位置,我们可以开始放一个左括号。 如果它不超过左括号的数量,我们可以放一个右括号。
class Solution { public List<String> generateParenthesis(int n) { List<String> s=new ArrayList<>(); backtrack(s,"",0,0,n); return s; } public void backtrack(List<String> s,String cur,int left,int right,int n) { if (cur.length() == 2 * n) { s.add(cur); return; } if (left < n) backtrack(s, cur + "(", left + 1,right, n); if (right < left) backtrack(s, cur + ")", left, right+1, n); } }