• 描述

括号。设计一种算法,打印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 清除递归状态
 
}