github:https://github.com/Renhongqiang/LeetCode
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n = 3,生成结果为:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
思路:
采用回溯法
class Solution {
public List<String> generateParenthesis(int n) {
List<String> rst = new ArrayList();
backtrack(rst, "", 0, 0, n);
return rst;
}
public void backtrack(List<String> rst, String str, int l, int r, int n)
{
//又括号数量等于括号对数n说明找到一个合格序列,添加到list,返回上一层
if(r == n)
{
rst.add(str);
return;
}
//左括号数量小于括号对数,添加一个左括号
if(l < n)
backtrack(rst, str+"(", l+1, r, n);
//右括号数量小于左括号数,添加一个右括号
if(r < l)
backtrack(rst, str+")", l, r+1, n);
}
}