一.题目描述
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:
[ "((()))", "(()())", "(())()", "()(())", "()()()" ]
二.代码编写
思想:像是对树进行深度优先遍历DFS,遍历的思想就是能加左括号的时候就加(左括号没用完时),不能加左括号时如果能加右括号就加右括号(只要当前左括号个数大于右括号就能加),当左右括号都用完的时候将该字符串加到输出数组,并对字符串从后往前找第一个可以被替换成右括号的左括号替换成右括号,再重复这个过程。
实现代码如下:
class Solution(object):
def generateParenthesis(self, n):
"""
:type n: int
:rtype: List[str]
"""
re_str = '('
re_str_list = []
i = 1 # left Parentheses used
j = 0 # right Parentheses usedd
while i<=n or j<=n:
if i<n:
# add left Parentheses if can
re_str += '('
i += 1
elif i>j: # when left Parentheses is run out, add right Parentheses if can
re_str += ')'
j += 1
elif len(re_str) == 2*n:
re_str_list.append(re_str) # add to output list
index=re_str.rfind('(') #backtracking
while index != -1: # -1 stands for not found
if 2*re_str[:index].count(')')<index:
re_str = re_str[:index]+')' # change left Parentheses to right
i = re_str.count('(')
j = index - i + 1
break
else:
index=re_str[:index].rfind('(')
if index == -1:
return re_str_list
return re_str_list