题目描述
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例:
输入: n = 3
输出:
[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]
题目分析
括号的生成主要是使用DFS的思想,
代码
Java代码如下:
class Solution {
private void dfs(int n, List<String> result, StringBuilder cur,int start ,int left,int right)
{
if(start>=n*2)
{
result.add(new String(cur));
return;
}
if(left<n)
{
dfs(n,result,cur.append('('),start+1,left+1,right);
cur.deleteCharAt(cur.length()-1);
}
if(right<left)
{
dfs(n,result,cur.append(')'),start+1,left,right+1);
cur.deleteCharAt(cur.length()-1);
}
}
public List<String> generateParenthesis(int n) {
List<String> result = new ArrayList<>();
dfs(n,result,new StringBuilder(),0,0,0);
return result;
}
}