北海市网站建设_网站建设公司_轮播图_seo优化
2025/12/26 10:52:16 网站建设 项目流程

题目:
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

示例 1:

输入:n = 3
输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]

示例 2:

输入:n = 1
输出:[“()”]

解析:
这道题又是一道典型的回溯算法题,重点在于递归的两个条件:
终止条件:当左右括号都用了 n 个时,得到一个有效组合

选择策略
只要左括号还有剩余,就可以添加左括号
只有当已添加的右括号数量小于左括号数量时,才能添加右括号

具体代码:

/** * 生成所有有效的括号组合 * @param {number} n - 括号的对数 * @return {string[]} - 所有有效的括号组合 */vargenerateParenthesis=function(n){// 1. 初始化结果数组,用于存储所有有效的括号组合letres=[]// 2. 当前正在构建的括号字符串,初始为空lettemp=''// 3. 开始深度优先搜索(DFS),从左右括号数量都为0开始dfs(n,0,0,res,temp)// 4. 返回所有生成的括号组合returnres};/** * 深度优先搜索函数,通过回溯生成所有有效的括号组合 * @param {number} n - 括号的对数 * @param {number} left - 当前已使用的左括号数量 * @param {number} right - 当前已使用的右括号数量 * @param {string[]} res - 存储结果的数组 * @param {string} temp - 当前正在构建的括号字符串 */functiondfs(n,left,right,res,temp){// 5. 终止条件:当左右括号数量都达到n时,说明构建完成if(left===n&&right===n){// 将当前有效的括号组合添加到结果数组中res.push(temp)// 返回,结束当前递归分支return}// 6. 选择1:添加左括号 '('// 条件:左括号数量还没有达到nif(left<n){// 6.1 做出选择:在当前字符串末尾添加左括号temp+='('// 6.2 递归探索:左括号数量加1,继续构建dfs(n,left+1,right,res,temp)// 6.3 撤销选择(回溯):删除刚刚添加的左括号// 注意:slice(0, -1)返回新字符串,所以需要重新赋值temp=temp.slice(0,-1)}// 7. 选择2:添加右括号 ')'// 条件:已使用的右括号数量小于左括号数量// 这个条件是保证括号有效性的关键:在任何位置右括号不能超过左括号if(right<left){// 7.1 做出选择:在当前字符串末尾添加右括号temp+=')'// 7.2 递归探索:右括号数量加1,继续构建dfs(n,left,right+1,res,temp)// 7.3 撤销选择(回溯):删除刚刚添加的右括号temp=temp.slice(0,-1)}// 8. 函数结束,返回到上一层递归// 注意:这里没有显式的返回值,通过修改res数组和temp字符串来传递结果}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询