【题目】
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对小括号的所有有效的排列组合。
【解题思路】
首先来看给定的输入用例中的输出结果, 不难看出, 这题可以用回溯法来解决。
1)先放左括号, 放完以后再放右括号, 字符串的个数为2*n时, 找到一种排列方法。
((()))
2)然后回溯, 一直回到最后一个左括号
((
3)然后在后面放一个右括号
(()
4)后面还是按照先放左括号再放右括号的策略
(()())
5)重读2-4步得到第二个排列组合, 以此类推。。。
(())()
【代码实现】
class Solution:
def generateParenthesis(self, n):
"""
:type n: int
:rtype: List[str]
"""
result = []
self.backtracking(result, '', 0, 0, n)
return result
def backtracking(self, result, s, left, right, n):
if len(s) == 2*n:
result.append(s)
return
if left < n: #左括号小于n可以放
self.backtracking(result, s+'(', left+1, right, n)
if right < left: #右括号小于左括号可以放
self.backtracking(result, s+')', left, right+1, n)