括号生成,题目具体来源于leetcode
具体题目是:给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n = 3,生成结果为:

解决方法
借鉴了评论中的一个方法,刚开始看的时候觉得自己看懂了,可是又理了一遍,发现又绕在里面了
class Solution {
public List<String> generateParenthesis(int n) {
List<String> res = new ArrayList<String>();
generate(res,"",0,0,n);
return res;
}
public void generate(List<String> res , String ans , int count1 , int count2, int n){
if(count1 > n || count2 > n){
return;
}
if(count1 == n && count2 == n){
res.add(ans);
}
if(count1 >= count2){
String ans1 = new String(ans);
generate(res,ans+"(",count1+1,count2,n);
generate(res,ans1+")",count1,count2+1,n);
}
}
}
这是具体的代码,在generate这个类执行的时候,第一遍先是有了第一个"(",这时候的count1的值为1,然后就是generate对自己的无限调用了,当有"(((",时,这时候再次调用的时候count1的值将会是4,return到上一步,这时候将会用到
generate(res,ans1+")",count1,count2+1,n);
这个代码块,当ans=((()))时,ans进入链表res,此时将会return到ans=(( 这个时候,以此来实现n对括号的多种组合,最后链表的内容就是n对括号的多种组合的结果。

1984

被折叠的 条评论
为什么被折叠?



