题目

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

示例:

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

题解

深度优先遍历

1. 我们以 n = 2 为例,画树形结构图。方法是 “做减法”

画图以后,可以分析出的结论:

  • 当前左右括号都有大于 0 个可以使用的时候,才产生分支;
  • 产生左分支的时候,只看当前是否还有左括号可以使用;
  • 产生右分支的时候,还受到左分支的限制,右边剩余可以使用的括号数量一定得在严格大于左边剩余的数量的时候,才可以产生分支;
  • 在左边和右边剩余的括号数都等于 0的时候结算。

Python代码:

from typing import List
class Solution:def generateParenthesis(self, n: int) -> List[str]:res = []cur_str = ''def dfs(cur_str, left, right):""":param cur_str: 从根结点到叶子结点的路径字符串:param left: 左括号还可以使用的个数:param right: 右括号还可以使用的个数:return:"""if left == 0 and right == 0:res.append(cur_str)returnif right < left:returnif left > 0:dfs(cur_str + '(', left - 1, right)if right > 0:dfs(cur_str + ')', left, right - 1)dfs(cur_str, n, n)return res

2. 使用加法,即left表示“左括号还有几个没有用掉”,right表示“右括号还有几个没有用掉”,可以画出另一棵递归树。

Python代码:

class Solution:def generateParenthesis(self, n: int) -> List[str]:res = []cur_str = ''def dfs(cur_str, left, right, n):""":param cur_str: 从根结点到叶子结点的路径字符串:param left: 左括号已经使用的个数:param right: 右括号已经使用的个数:return:"""if left == n and right == n:res.append(cur_str)returnif left < right:returnif left < n:dfs(cur_str + '(', left + 1, right, n)if right < n:dfs(cur_str + ')', left, right + 1, n)dfs(cur_str, 0, 0, n)return res

路径字符串生成树形结构的思路_LeetCode 22. 括号生成相关推荐

  1. 路径字符串生成树形结构的思路_资源推荐!顶级程序员必刷宝典!LeetCode中文解题思路重磅问世!...

    今天推荐一个Github资源,该主题是中文LeetCode解题思路,让你完美应对公司笔试! LeetCode简介 LeetCode收录了许多互联网公司的算法题目,被称为刷题神器. 资源内容 第一个部分 ...

  2. java 生成树形结构_java 生成树形结构(极速版)

    树形结构是非常常见的数据结构,生成树形结构的方法比较常见的有递归,for循环,不管使用什么方法,如果能很好地利用内存来合理地添加树节点,则能极大提高效率 测试代码如下: public class Te ...

  3. 在不知道根节点的情况下生成树形结构 (采用JSONObject)

    废话不多说直接上代码 /*** * 生成树形结构 在不知道跟节点的情况下* @param list 源数据* @param nodeList 跟节点数据* @param childName 子节点名称 ...

  4. 利用Stram来递归生成树形结构

    利用Stram来递归生成树形结构 当需要查询有子菜单,或者子部门这一类需要形成树形的数据时,我们可以使用stream流式编程写 实体类 实体类需要有一个子列,类似此处的子城市 @Data @Equal ...

  5. Leetcode 22. 括号生成(递归+去重)

    22. 括号生成 思路: 递归+map去重: 递归函数声明: vector<string> generateParenthesis(int n); 递归出口: 当n=1时,返回{" ...

  6. Leetcode-笔记-22.括号生成--递归

    Leetcode-笔记-22.括号生成 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合. 示例 1: 输入:n = 3 输出:["((()))& ...

  7. [DFS|剪枝] leetcode 22 括号生成

    [DFS|剪枝] leetcode 22 括号生成 1.题目 题目链接 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合. 示例: 输入:n = 3 输出:[& ...

  8. LeetCode Algorithm 22. 括号生成

    22. 括号生成 Ideas 这是一道动态规划的题目,关于动态规划的题目我们可以从n比较小的情况下开始逐步分析. 当n=1时,["()"] 当n=2时,["()()&qu ...

  9. mysql关系型数据库生成树形结构,Layui页面渲染树型结构图(详细)

    文章目录 一.学使用DTree 上代码(详细说明注释见) 引入结构 说明 dataFormat:"list" 二.使用MySQL查询结果 说明 三.效果展示 总结 # 前言 项目使 ...

最新文章

  1. R 包 optparse 之命令行参数传递
  2. c语言算法6,c语言6函数和算法.ppt
  3. windows下编译zlib
  4. Linux参数顺序,【每日一linux命令3】参数(或称选项)顺序
  5. 火狐(FireFox)
  6. python做硬件自动化测试-用python做自动化测试--Python实现远程性能监控
  7. set的用法及短语_专升本英语易考短语搭配+常考句型
  8. Mysql过长的Sql语句优化:在循环中调用存储过程运行动态语句
  9. sublime 如何使用less_【图文】5分钟可以学会在vue里使用sass?
  10. php 转gbk,php 中文怎么转gbk
  11. 光线微弯传感器matlab仿真,光纤压力与位移传感特性
  12. PHP打印九九乘法表
  13. JDBC获取数据库(mysql)四种连接方式(connection)
  14. 那种语言不属于w3c标准,前端之W3C标准及规范
  15. e4a浏览框本地HTML,E4A浏览器 · E4A易安卓中文开发教程-E4A社区 · 看云
  16. mqtt简介及在web端的应用(接入阿里iot)
  17. moses gcc link failed
  18. Redis-desktop-manager显示黑屏
  19. 每天一本书 [2014/06/10-2014/07/10 ]
  20. catboost 的实例应用附带特征重要度打印

热门文章

  1. 详谈jsp和servlet的区别
  2. 秒杀(PHP,Redis,Lua)
  3. chromedriver与chrome版本映射表(更新至v2.30)
  4. 古代password
  5. AngularJs前端环境搭建
  6. Spring的IOC原理[通俗解释一下]
  7. jQuery reset
  8. Fedora 18下 升级内核后VirtualBox不能正常使用的问题
  9. Toast 自定义位置和带图
  10. php curl 下载网页,php 通过cURL函数抓取网页、下载网页的简单示例