/*给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。括号只有{}[]()这三种。
例如,给出 n = 3,生成结果为:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]*/
import java.util.ArrayList;
import java.util.List;
public class generateParenthesis {
//参数有n对的{}()[],
public static List<String> generater(int n) {
List<String> result=new ArrayList<String>();
generaterOneByOne("",result,n,n);
return result;
}
/**
* left:左边的括号就n个
* right:右边的括号有n个
* 思想:
* 必须先放左边的括号,以递归的方式,然后直到左边的括的数目小于0时,以及右边的括号为0时,截止并放到结果中
* 右边的括号要后放:也就是right>left,保证右括号大于左边括号的数目
*
* @param substring
* @param result
* @param left
* @param right
*/
private static void generaterOneByOne(String substring, List<String> result, int left, int right) {
if (left==0&&right==0) {
result.add(substring);
return;
}
if (left>0) {
generaterOneByOne(substring+"(", result, left-1, right);
}
if (right>left) {
generaterOneByOne(substring+')', result, left, right-1);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}