题目:
难度:Middle
相关话题:字符串
、回溯算法
给出n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的 括号组合。
例如,给出n =** 3,生成结果为:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
思路:
每一个位置都有2个选择,放置(
或者)
。
如果(
的数量超过了n
说明一定不成立;
如果)
的数量超过了(
的数量,也一定不成立;
如果两个的数量都为n
,那么就是一个有效的完整组合。
/**
* @来源: Javascript中文网 - 前端进阶资源教程 https://www.javascriptc.com/
* @介绍:一个致力于帮助开发者用代码改变世界为使命的平台,每天都可以在这里找到技术世界的头条内容
* @param {number} n
* @return {string[]}
*/
var generateParenthesis = function(n) {
let s=''
let l="(",r=")"
let res=[]
function dfs(s,n,lN,rN){
if(lN>n || lN<rN)return
if(lN===n && rN===n)res.push(s)
dfs(s+l,n,lN+1,rN)
dfs(s+r,n,lN,rN+1)
}
dfs(s,n,0,0)
return res
};