合法括号是个排列组合问题,问题是给出一个n表是括号的数量,让你求出这n个括号的合法摆放方式有那些。
示例:
n = 3,所有的合法序列为[()()(), (()()), ()(()), (())(), ((()))]
这题是求全排列问题的一个变体,问题是放在左边或右边,由于这道是变体题,所以在全排列的基础上增加了放在中间。在这使用迭代和递归实现。
迭代实现
/**
* 迭代实现
* @param n 括号的数量
* @return
*/
static Set<String> kuohao(int n){
Set<String> set_n = new HashSet<>();
set_n.add("()");
if(n == 1) {
return set_n;
}
for(int i=2;i<=n;i++) {
Set<String> set_tem = new HashSet<>();
for (String e : set_n) {
set_tem.add("()"+e);
set_tem.add(e+"()");
set_tem.add("("+e+")");
}
set_n = set_tem