力扣上的题目可以大致分为以下种类:

  • 对某种复杂规则的彻底解析,很有可能要构造状态机,充分考虑边界情况。

  • 对某种数据结构及算法的应用。

  • 对数学概念、遍历、动态规划等的综合应用。

通过分析,本题应该属于1,2的结合。

思路:先产生一个{ -->每次分两种情况产生({或})-->}数小于{数时不产生-->{}数等于2N时结束

回溯法

回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。

回溯算法在解决多选择问题时特别有效,一般思路如下:在当前场景下,存在若干种选择去操作,有可能两种结果:一是违反相应条件限制,只能返回(back),另一种是该选择选到最后居然正确并结束。故在回溯时存在三要素,能总结出这样的三要素问题便可以迅速解决:

1 找到选择

2 限制条件,即选择操作在此条件下才进行

3 结束

本题中:

1选择:

加括号

2限制条件:

(1)若左括号未加完 加左括号

(2)若右括号小于左括号,加右括号

3结束:

左右括号加完(长度=2n)结束

if (左右括号都已用完) {
加入解集,返回
}
//否则开始试各种选择
if (还有左括号可以用) {
加一个左括号,继续递归
}
if (右括号小于左括号) {
加一个右括号,继续递归
}
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
res = []
def backtracking(s="",left=0,right=0):
if len(s)==2*n:
res.append(s)
return
if left<n:
backtracking(s+'(',left+1,right)
if right<left:
backtracking(s+')',left,right+1)
backtracking()
return res

最新文章

  1. 如何保证ArrayList线程安全
  2. 【vs2010调试】当前不会命中断点 源代码与原始版本不同
  3. EditPlus
  4. asp.net 发送邮件
  5. Android配置----adb工具的使用
  6. 管理Fragment
  7. Windows Phone使用总结(长期更新)
  8. MySQL 5.6 和 MariaDB-10.0 的性能比较测试
  9. open file 值修改
  10. mac版sublime text2包管理器安装步骤
  11. xcode KVC:Key Value Coding 键值编码
  12. Redis+Springmvc搭建(附windows下安装)
  13. jsp 表单回显
  14. 【BZOJ5506】[GXOI/GZOI2019]旅行者(最短路)
  15. iOS Simulator version 11 or later is currently not supported.
  16. BigDecimal加减乘除
  17. html css col-md-offset
  18. 大数据入门到精通9-真正得wordcount
  19. 【Linux】CentOS7 安装rabbitmq
  20. s标签s:if和s:set实现一个表格显示为多个表格

热门文章

  1. 23. docker 数据持久化 bind mounting
  2. winform程序常用图标网站及资源
  3. C - Monitor CodeForces - 846D (二维前缀和 + 二分)
  4. log4j2和logback动态修改日志级别工具类
  5. vim编辑模式下黑色背景,下来过程中出现白条的问题
  6. JavaScript学习笔记 - 入门篇(2)- 常用互动方法
  7. JS事件高级
  8. python uiautomator2 新版本2.4.6之watcher的玩法
  9. HTML5之FileReader小结
  10. java常用工具类(三)