给定一个数字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;
}
}
该博客介绍了如何利用回溯算法解决生成所有合法括号序列的问题。通过维护左右括号的数量,在递归过程中确保括号的正确配对,最终得到所有n个括号的正确组合。示例代码展示了如何实现这一过程。
424

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



