给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n = 3,生成结果为:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
嗯 最开始毫无思路,看到又是个中等题觉得自己应该可以做出来,想了想应该是一个一个添加到字符串,判断能不能添加进去,添加左括号无限制,添加右括号时左边的左括号数必须大于右括号数才能添加右括号,数据较小,搜一遍就跑出来了。
class Solution {
List<String> m = new ArrayList<String>();
String p = "(";
int sum;
public void ddgg(String a,int left_num,int totle_number){
if(totle_number == sum*2){ //总数为括号数的两倍
m.add(a);
return ;
}
if(left_num <sum){ //最开始写成了<3 真的是zz
ddgg(a+"(",left_num+1,totle_number+1); //添加左括号
if(left_num*2 > totle_number){ //判断能不能添加右括号
ddgg(a+")",left_num,totle_number+1);
}
}
else{
ddgg(a+")",left_num,totle_number+1); //只能添加右括号
}
}
public List<String> generateParenthesis(int n) {
sum = n;
ddgg(p,1,1);
return m;
}
}