问题描述:
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n = 3,生成结果为:
[ "((()))", "(()())", "(())()", "()(())", "()()()" ]
问题分析:
使用回溯法,现在要知道一个事情,在生成的有效的字符串过程中,左括号 '(' 在前且个数大于右括号 ')' 的个数。说白就是,优先生成左括号 '(',不能生成的时候就回溯到前一个位置去生成右括号 ')' ,在生成的过程分别用 left、right 记录左右括号的个数,直至结束。
Python3实现:
class Solution:
def generateParenthesis(self, n):
ans = []
def backtrack(s='', left=0, right=0):
if len(s) == 2 * n:
ans.append(s)
return
if left < n: # 一直添加左括号
backtrack(s+'(', left+1, right)
if left > right: # 保证左括号的个数大于右括号的情况下,才能添加右括号
backtrack(s+')', left, right+1)
backtrack()
return ans
if __name__ == '__main__':
n = 3
solu = Solution()
print(solu.generateParenthesis(n))
参考文献:
[1]:https://leetcode.com/problems/generate-parentheses/solution/