题目
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n = 3,生成结果为:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
思路
- 使用递归
- 当左括号的个数等于n ,并且右括号的个数等于n的时候,就是终止条件,同时将此时的字符串添加到列表中
- 只有当左括号的个数大于右括号的个数的时候,才能添加右括号
- 只有当左括号的个数小于n的时候,才能添加左括号
代码
class Solution {
public List<String> generateParenthesis(int n) {
List<String> res = new ArrayList<>();
fun(res, "", 0, 0, n);
return res;
}
public void fun(List<String> res, String str, int a, int b, int n){
//str用来存当前的字符串,a代表str中左括号的个数,b代表str中右括号的个数
if(a==n && b==n) //添加元素的条件
{
res.add(str);
return;
}
if(a>b){ //当左括号的个数大于右括号的时候,可以添加右括号
fun(res, str+")", a, b+1, n);
}
if(a<n) //当左括号的个数小于n的时候,可以添加左括号
fun(res, str+"(", a+1, b, n);
}
}