108.括号生成
题目链接
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/generate-parentheses
题目描述
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例:
输入:n = 3
输出:[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]
重难点
找出括号生成规律
题目分析
- 括号分成左括号(left)和右括号(right);
- 根据n生成n对括号可知:left <=n ,right <= left;
- 写一个生成括号的函数:记录左括号,右括号的数量,并生成括号存放在res中;
- 边界:左括号数量不超过n,右括号数量不超过左括号数量,即left < n,right < left
- 当left == n && right == n时,return res;
/**
* @param {number} n
* @return {string[]}
*/
let generateParenthesis = (n) =>{
let res = [];
function dfs(s, left, right){
if(left == n && right == n) return res.push(s);
if(left < n) dfs(s+'(', left+1, right);
if(right < left) dfs(s+')', left, right+1);
}
dfs('', 0, 0);
return res;
}