LintCode 生成括号
http://www.lintcode.com/zh-cn/problem/generate-parentheses/
原题
给定 n 对括号,请写一个函数以将其生成新的括号组合,并返回所有组合结果。
样例
给定
n = 3, 可生成的组合如下:
"((()))", "(()())", "(())()", "()(())", "()()()"
解题思路
- 典型的使用递归列举出所有答案
- 只有左括号数量大于右括号数量的时候才可以添加右括号
代码实现
class Solution:
# @param {int} n n pairs
# @return {string[]} All combinations of well-formed parentheses
def generateParenthesis(self, n):
# Write your code here
self.limit = n
self.ret = []
self._generateParenthesis("", 0, 0)
return self.ret
def _generateParenthesis(self, comb, leftnum, rightnum):
if leftnum == self.limit and rightnum == self.limit:
self.ret.append(comb)
return
if leftnum < self.limit:
self._generateParenthesis(comb+'(', leftnum+1, rightnum)
# 如果右括号小于左括号才可以加右括号
if rightnum < leftnum:
self._generateParenthesis(comb+')', leftnum, rightnum+1)

浙公网安备 33010602011771号