[数据结构和算法]状态树的问题
来源:互联网 发布:马桶品牌知乎 编辑:程序博客网 时间:2024/06/06 20:33
问题
给定一个正整数 n, 求输出符合期望的所有的 左右括号的组合。要求,左括号不小于右括号。当 n = 3 的时候,输出值为:
["((()))", "(()())", "(())()", "()(())", "()()()"]
分析
这是问题可以抽象成状态树:
* 节点: 在 x 的时候(0 <= x <=n), 此时的左右括号的个数为 (x, y)
* 边: (x,y) 到 (x +1, y) 或者 (x, y+1) 两个点的运算
* 约束条件: x >= y ; 当 x == y 时, (x , y +1 ) 不合法
* 起点和终点: (0, 0) -> (n, n)
因为本题需要得到“全部解”,所以使用深度搜索。
代码
###给定一个正数 n , 输出所有合法的左右括号的组合,比如 n = 3,# ((())) ()()() (()()) ##def solution(n) result = [] help(n, 0, 0, "", result)enddef help(n, x, y, now, items) if y == n items << now return end if x < n help(n, x + 1, y, now + "(", items) end if x > y help(n, x, y + 1, now + ")", items) end return itemsendp solution(3)
代码说明
- 结束条件是 y == n ,因为 x >= y , 所以当 y == n的时候,其实已经到了终点
- 优先考虑 x, 当 x < n 的时候,先增加左括号
- 但 x > y 的时候,增加右括号
0 0
- [数据结构和算法]状态树的问题
- 【算法结构】一些经典的算法和数据结构的问题
- 数据结构和算法是解决C语言问题的关键!
- 【数据结构与算法】最大子序列和问题的求解
- 数据结构和算法--二叉树的实现
- 数据结构与算法学习之路:背包问题的贪心算法和动态规划算法
- 数据结构若干经典问题和算法 (收藏)
- 常见java 和数据结构算法 问题总结
- 魔术师发牌问题-数据结构和算法
- 《数据结构和算法》之八皇后问题
- Java 数据结构和算法 计算表达式问题
- java的数据结构和算法
- 算法和数据结构的重要
- 可视化的数据结构和算法
- 可视化的数据结构和算法
- 可视化的数据结构和算法
- 可视化的数据结构和算法
- 可视化的数据结构和算法
- android 中 dumpsys 命令使用
- javascript 简介和基础
- CodeForces - 630P Area of a Star (数学几何&正弦定理求面积)
- C#中Abstract和Virtual
- hdu 1158 Employment Planning【dp】
- [数据结构和算法]状态树的问题
- 蒙特卡洛树算法 (MCTS)
- 互联网时代中生存
- 如何解决delphi xe8编译大程序时内存不够的问题。
- 多个USB短信猫,启动短信猫后台程序总是有几个不能连接
- Android中使用FontAwesome
- 幸福新思维
- 史上最权威《全球O2O企业名录》:共880家
- Android中实时视频传输(摄像头实时视频传输)解决方案<二>