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。
- 只要左括号
(
的数量没有超过N,都可以插入左括号(
。 - 插入右括号
)
的前提则是当前的左括号(
数量必须要多于当前的右括号)
数量。
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.