[python]leetcode(22). Generate Parentheses
来源:互联网 发布:三星系统升级软件 编辑:程序博客网 时间:2024/05/22 12:24
problem
Given n pairs of parentheses, write a function to generate all
combinations of well-formed parentheses.
solution1-回溯法
参考这篇博客的模板,我们可以把括号生成的问题考虑成一颗二叉树遍历问题,对这棵树进行遍历回溯。
class Solution(object): def backtrack(self, res, tmpstr, left, right, n): if len(tmpstr) == n*2: res.append(tmpstr[:]) else: if left < n: self.backtrack(res, tmpstr + '(', left + 1, right, n) if right < left: self.backtrack(res, tmpstr + ')', left, right + 1, n) def generateParenthesis(self, n): res = [] self.backtrack(res, '', 0, 0, n) return res
这个算法关键是考虑好分支限界问题,分别是
- 如果当前左括号数量小于n,则可以继续添加’(‘
- 如果当前右括号数量小于左括号数量,则可以继续添加’)’
另外一个和模板不同的地方是之前是操作的list(可变对象),所以直接append和pop很方便、节约内存,而这里的str不可变,所以我们只能传入副本,对原来的tmpstr不进行修改,也就不需要pop了。
solution2-动态规划解法
如何通过f(1)…f(n-1)推出f(n),及如何写出递推方程?
f(n)比f(n-1)多一对括号,因为第一个位置肯定是左括号’(‘,要想放入右括号后括号仍然匹配,就要新加入的左右括号之间有i对匹配的括号,右边有n-i-1对。
f(0): “”
f(1): “(“f(0)”)”
f(2): “(“f(0)”)”f(1), “(“f(1)”)”
f(3): “(“f(0)”)”f(2), “(“f(1)”)”f(1), “(“f(2)”)”
So f(n) = “(“f(0)”)”f(n-1) , “(“f(1)”)”f(n-2) “(“f(2)”)”f(n-3) … “(“f(i)”)”f(n-1-i) … “(f(n-1)”)”
因为,这样算法推出的字符串都满足要求,且f(n)中的匹配形式一定可以拆成这样的形式’(f(i))f(n-i-1)’,所以这个递推方程是正确的。
总结
这种满足一定条件的,序列生成问题一般都可以用回溯法解决。
阅读全文
0 0
- [python]leetcode(22). Generate Parentheses
- 【Leetcode】【python】Generate Parentheses
- LeetCode 22: Generate Parentheses
- [leetcode 22] Generate Parentheses
- LeetCode | #22 Generate Parentheses
- [Leetcode] 22- Generate Parentheses
- LeetCode 22 Generate Parentheses
- [LeetCode 22]Generate Parentheses
- leetcode 22 Generate Parentheses
- Leetcode 22 Generate Parentheses
- LeetCode 22 - Generate Parentheses
- Generate Parentheses - LeetCode 22
- leetcode 22 -- Generate Parentheses
- leetcode-22Generate Parentheses
- leetcode 22: Generate Parentheses
- Leetcode#22 Generate Parentheses
- LeetCode(22) Generate Parentheses
- Leetcode 22 Generate Parentheses
- Python_解析xml
- 1248 寒冰王座 换个思维来解决这个背包题目
- MOOC清华《VC++面向对象与可视化程序设计》第3章:Windows文本-例(2)字体、颜色、下划线
- HDOJ2031(十进制变X进制)
- Hql
- [python]leetcode(22). Generate Parentheses
- Python练手程序-04
- 图片上传到网络上
- LeetCode Blog for course "Algorithms" -- Problem 3 & 5
- windows 保存git的账号密码
- CodeForces
- 开源C++服务端知多少
- Java-比较操作
- JZOJ 5389. 【NOIP2017提高A组模拟9.26】解梦