22.括弧生成(JavaScript)


与える n 括弧を生成する対数を表します.可能で有効な括弧の組み合わせをすべて生成できる関数を書き出してください.
例えば、与えられた n = 3,生成結果は:
[
  "((()))",
  "(()())",
  "(())()",
  "()(())",
  "()()()"
]
考え方:
この問題はもう公式の3つの標準的な答えがあります.括弧の生成方法を見てください.
ここにJavaScriptバージョンを添付します.
/**
 * @param {number} n
 * @return {string[]}
 */
var generateParenthesis = function(n) {
  var result = [];
  dfs(n, n, '', result);  //             n
  return result;
};


/**
 * @param {number} left           
 * @param {number} right           
 * @param {string} str         
 * @param {string[]} result     
 * @return {null}
 */
var dfs = function(left, right, str, result) {
  if (left > right) return;               //             ,       ,     。
  if (left === 0 && right === 0) result.push(str);  //         ,             
  else {
    if (left > 0) dfs(left - 1, right, str + '(', result);  //        ,      
    if (right > 0) dfs(left, right - 1, str + ')', result); //        ,      
  }
};