- 描述
括号。设计一种算法,打印n对括号的所有合法的(例如,开闭一一对应)组合。
-
说明:解集不能包含重复的子集。
-
例如,给出 n = 3,生成结果为:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
- Solution
class Solution {
public List<String> generateParenthesis(int n) {
List<String> list = new ArrayList<>();
if(n == 0){
return list;
}
compute(list,"",0,0,n);
return list;
}
private void compute(List<String> list,String res,int left,int right,int n){
if(res.length() == n * 2){
list.add(res);
return;
}
if(left < n){
compute(list,res + "(", left + 1,right,n);
}
if(right < left){
compute(list,res + ")", left,right + 1,n);
}
}
}
- 递归模版
public void recur(int level, int param) {
// terminator 递归终止条件
if (level > MAX_LEVEL) {
// process result
return;
}
// process current logic 递归处理逻辑
process(level, param);
// drill down 下探下一层
recur( level: level + 1, newParam);
// restore current status 清除递归状态
}