题目
https://leetcode-cn.com/problems/generate-parentheses/
思路
递归生成,当做一颗树,每层加入一个)
或(
,这样子就可以用dfs把所有的组合列出来,因为是有效的括号,对树的每一层进行判断,当右括号数大于左括号数,不成立;当左括号数大于总数的一半,不成立。
code
/**
* @param {number} n
* @return {string[]}
*/
function f(n,res,str, left, right){
if (left < right) return; //右括号数大于左括号
if (left > n) return; // 左括号数大于一半
if (left + right == 2*n) {
res.push(str);
// console.log(res);
return;
}
let l = '(';
let r = ')';
f(n, res, str+l, left+1, right);
f(n, res, str+r, left, right+1);
}
var generateParenthesis = function(n) {
let res = [];
f(n, res, '', 0,0);
return res;
};