跳转至

22. Generate Parentheses

Leetcode String Backtracking

题目

Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.

For example, given n = 3, a solution set is:

[
  "((()))",
  "(()())",
  "(())()",
  "()(())",
  "()()()"
]

中文题目

罗列出n组括号的所有合法的排列组合。 注意点:

只有一种括号形式()

例子:

输入: n = 3 输出: ['((()))', '(()())', '(())()', '()(())', '()()()']

思路

解题思路:回溯法,递归的思想,判断匹配成功(递归返回)的条件为:左右括号数保持一致并且括号字符串的长度等于2\times N

  1. 只要左括号(的数量没有超过N,都可以插入左括号(
  2. 插入右括号)的前提则是当前的左括号(数量必须要多于当前的右括号)数量。
class Solution(object):
    def generateParenthesis(self, N):
        ans = []
        def backtrack(S = '', left = 0, right = 0):
            print(S)
            if len(S) == 2 * N:
                ans.append(S)
                return
            if left < N:
                backtrack(S +'(', left+1, right)
            if right < left:
                backtrack(S +')', left, right+1)

        backtrack()
        return ans

Your runtime beats 100.00 % of python3 submissions.