给定一个数字n,返回由n个括号生成的所有正确括号集合
如(())是正确的括号,而())(不是
题解: 回溯
定义两个变量 left 和right 分别记录左右括号的个数
首先要保证 right <= left <= n
当left ==right == n时说明得到了一个正确的括号序列,存到集合中
class Solution {
public static void f(List<String> answer,int n,int left,int right,String str)
{
if(left == right && right == n)
{
answer.add(str);
System.out.println(str);
return ;
}
else if(right>left||left>n||right>n)
{
return ;
}
else
{
f(answer,n,left+1,right,str+"(");
f(answer,n,left,right+1,str+")");
return ;
}
}
public List<String> generateParenthesis(int n) {
List<String> ans = new ArrayList();
f(ans,n,0,0,"");
return ans;
}
}