题目描述
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例:
输入:n = 3
输出:[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/generate-parentheses
题解
class Solution
{
List<String> list = new ArrayList();
int left = 0; //左括号有多少个
int right = 0; //右括号有多少个
public void bianli(int n,String str)
{
if(left == n && right == n)
{
list.add(str);
}
if(left>n || right>n)
return;
for(int i=0;i<2;i++)
{
if(i==0)
{
str = str+"(";
left++;
bianli(n,str);
str = str.substring(0,str.length()-1); //回溯
left--; //回溯
}
if(i==1 && left>right) //left>right即对树进行剪枝,即如果当前左括号大于右边括号的个数,return。
{
str = str+")";
right++;
bianli(n,str);
str = str.substring(0,str.length()-1);//回溯
right--;//回溯
}
}
return;
}
public List<String> generateParenthesis(int n)
{
bianli(n,"");
return list;
}
}