LeetCode每日一题——T22. 括号生成(中):回溯算法——通用解法
2019-07-21 21:11
246 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41514090/article/details/96762507
回溯算法
采用回溯算法进行求解。其基本思想为:沿一条路往前走,走到头后,判断是否符合要求,然后返回上一个岔路口,换条路继续走,走到头继续判断是否符合要求,并返回上一个岔路口,如何该岔路口其他岔路也走过了,则再往上返回上个岔路口,如此往复,直到返回出发点。
例如本题,每个岔路就是在 字符串 S 中继续放 “(”还是放 “)”,结束条件是字符串长度是否等于 2 * n。假如 n = 3,则求解时,先生成解1:"((()))",满足结束条件,存入 res 中,然后回溯上一个岔路A:"((",此时换条路就变成,"(()",然后继续走下一个岔路B。走完后,在返回岔路A,岔路A下面的所有岔路均走过,继续返回岔路C:"(",换条路:"()",重复上述过程,直至返回到起点 " "。输出解空间。
class Solution: def generateParenthesis(self, n: int) -> List[str]: res = [] # 设置空字符串 S 作为临时变量存储不完整解 def BackTrack(S = "", left = 0, right = 0): if len(S) == 2 * n: res.append(S) # 当空字符串 S 长度满足要求时结束,存入 res 中 return if left < n: # left与right 用于判断结束条件与选择条件 BackTrack(S + "(", left + 1, right) if right < left: BackTrack(S + ")", left, right + 1) BackTrack() return res
相关文章推荐
- LeetCode 22. Generate Parentheses 生成括号 Python 回溯解法
- 【LeetCode-面试算法经典-Java实现】【022-Generate Parentheses(生成括号)】
- LeetCode Linked List Cycle II 和I 通用算法和优化算法
- leetcode刷题python之括号生成
- LeetCode 22括号生成python实现
- leetcode 22. 括号生成
- 【算法学习笔记】14.暴力求解法02 子集生成的三种方法
- LeetCode 22 Generate Parentheses(生成括号)
- 【算法学习笔记】16.暴力求解法04 回溯法03 剪枝法 带宽
- 移动火柴问题的程序解法及生成算法
- 排列的字典序生成算法(自然解法)
- LeetCode 22 Generate Parentheses(生成括号)
- leetcode 括号生成c++
- 【算法学习笔记】16.暴力求解法04 回溯法03 剪枝法 带宽
- LeetCodet题解--22. Generate Parentheses(生成n对匹配的括号)
- leetcode-括号生成(python)
- 回溯算法 8皇后问题的一种解法 适合初学者观察整个回溯的过程
- leetcode generate-parentheses括号回溯
- (LeetCode每日一刷06)有效的括号
- Leetcode:Generate Parentheses 生成有效括号对