package leecode;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
/**
* 22. 括号生成
*
* 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
*
* 有效括号组合需满足:左括号必须以正确的顺序闭合。
*
* @author Tang
* @date 2021/9/22
*/
public class GenerateParenthesis {
List<String> resultList = new ArrayList<>();
int num;
/**
* 二叉树
* 前序遍历 根左右
*
*
* @param n
* @return
*/
public List<String> generateParenthesis(int n) {
num = n;
//括号总个数
generator("", "(", 0, 0);
return resultList;
}
/**
*
* @param str 拼接的字符串
* @param append 下次要添加的括号
* @param left 左括号数量
* @param right 右括号数量
*/
private void generator(String str, String append, int left, int right) {
String line = str;
//保证左括号数量始终大于等于右括号数量
if(left == right && ")".equals(append)) {
return;
}
if("(".equals(append)) {
left++;
}else {
right++;
}
line += append;
//凑齐括号 召唤神龙
if(left + right == num * 2) {
resultList.add(line);
return;
}
if(left < num) {
generator(line, "(", left, right);
}
if(right < num) {
generator(line, ")", left, right);
}
}
public static void main(String[] args) {
System.out.println(new GenerateParenthesis().generateParenthesis(3));
}
}