LintCode 生成括号

http://www.lintcode.com/zh-cn/problem/generate-parentheses/

原题

给定 n 对括号,请写一个函数以将其生成新的括号组合,并返回所有组合结果。

样例

给定 n = 3, 可生成的组合如下:

"((()))", "(()())", "(())()", "()(())", "()()()"

解题思路

  1. 典型的使用递归列举出所有答案
  2. 只有左括号数量大于右括号数量的时候才可以添加右括号

代码实现

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)
            

  

原文地址:https://www.cnblogs.com/LiCheng-/p/6625334.html