首页 > 编程语言 >数字n代表生成括号的对数,设计一个函数,用于能够生成所有可能的并且有效的括号组合 回溯算法

数字n代表生成括号的对数,设计一个函数,用于能够生成所有可能的并且有效的括号组合 回溯算法

时间:2022-11-04 22:44:48浏览次数:43  
标签:right cur 生成 括号 算法 回溯 left

题目描述:

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

如   n=2 则输出 // ['(())', '()()']

  n=3 则输出 // ['((()))', '(()())', '(())()', '()(())', '()()()']

解题思路:

1.首先每个括号是成对的一个左括号和右括号两个元素组成,有效的括号即左右括号要对应

2.每放置一个左括号,便可以放置一个右括号,并且在左括号数量小于 n 时依然可以放置左括号

——左括号数量不大于 n 时可以添加左括号

——左括号数量大于右括号时可以添加右括号

3.定一个数组容器放生成的组合字符串,用初始化空字符串来写入括号

4.边界条件是左右括号数量和达到 2*n 时把字符串push()进容器数组

let generateParent = function(n){ 
    let res = []
    let handleParen = (cur, left, right) =>{
        if(cur.length === 2*n) { // 满足条件时结束递归调用
            res.push(cur)
            return
        }
        if(left < n) { // 进入到这个条件的同时并不会阻塞下面的条件语句,也就是另外一种可能
            handleParen(cur+"(", left +1 , right)
        }
        if(left > right) {
            handleParen(cur + ')', left, right+1)
        }
    } 
    handleParen('',0,0) // 设置一个初始状态
    return res
}
console.log(generateParent(3), 'generateParent')

 

在这里正好普及下回溯算法

回溯算法,也是算法设计中的一种思想,是一种渐进式寻找并构建问题解决方式的策略

回溯算法会先从一个可能的工作开始解决问题,如果不行,就回溯并选择另一个动作,直到将问题解决

使用回溯算法的问题,有如下特性:

  • 有很多路,例如一个矩阵的方向或者树的路径
  • 在这些的路里面,有死路也有生路,思路即不符合题目要求的路,生路则符合
  • 通常使用递归来模拟所有的路

标签:right,cur,生成,括号,算法,回溯,left
From: https://www.cnblogs.com/yrys/p/16859338.html

相关文章

  • 代码生成插件easycode
    gitee地址​​EasyCode:EasyCode是基于IntelliJIDEA开发的代码生成插件,支持自定义任意模板(Java,html,js,xml)。只要是与数据库相关的代码都可以通过自定义模板来生成。支持数......
  • 高手是这样排查问题的——两层使用存储过程批量生成单据和查询分析器生成单据都正确,使
    问题描述:在两层的情况下,使用存储过程批量生成单据时,正确在查询分析器中,直接使用代码执行存储过程时,正确在三层的情况下,使用存储过程批量生成单据时,错误 问题查找:1、......
  • adobe acrobat dc插件AutoBookMark自动生成目录
    1.adobeacrobatdc的从结构新建书签不好用,经常给我胡乱定位操作示例2.下载插件AutoBookMark百度网盘:https://pan.baidu.com/s/1BanZjwz-aThoRla91b......
  • 使用koa-generator生成koa2项目
    1、新建项目目录,准备在哪里创建项目和写代码,就在哪里创建即可。2、打开命令行窗口。安装koa-generator,安装命令为:npminstall-gkoa-generator(全局安装)3、使用koa-generat......
  • IntelliJ IDEA 生成serialVersionUID
     1.设置Settings-->Editor->Inspections 2.实现Serializble  ......
  • Intellij IDEA 自动生成 serialVersionUID
    Setting->Inspections->Serializationissues->Serializableclasswithout’serialVersionUID’选上以后,在你的class中:Alt+Enter就会提示自动创建serialVersionUID了。......
  • 关于OpeSSL生成自签名证书-包含完整证书链生成(全网最全)
    相信大家对证书已经有一个比较直关的了解,这里只讲如何创建自签证书,关于openssl的使用或者证书的相关内容,此处不做过多讲解废话不多说,直接上手。一般证书分为根证......
  • python-迭代器与生成器
    迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。迭代器有两个基本的方法:iter()和next()。字符串,列表或元组对象都可用于创建......
  • Vue脚手架生成一个新项目
    Vue脚手架生成一个新项目 1.输入cmd打开当前目录,并输入指令vuecreate项目名称 2.选择自己配置的历史配置或使用新配置Manuallyselectfeatures(即为新配置......
  • Java(screw)生成数据库表结构
    数据库支持MySQLMariaDBTIDBOracleSqlServerPostgreSQLCacheDB(2016)文档生成支持htmlwordmarkdown方式一:代码生成<dependency><groupId>cn......