leetcode 第二发
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:
"((()))", "(()())", "(())()", "()(())", "()()()"
看到这个题首先联想到的就是编译原理课上学到的词法分析和语法分析之类的内容,通过栈来实现。一下是Python实现可以没有通过LeetCode的时间限制
Python实现:class Solution:
# @param an integer
# @return a list of string
def generateParenthesis(self, n):
l = []
for i in range(1, 2*n+1):
l.append(i)
alls = list(itertools.permutations(l, 2*n))
pResult = []
for t in alls:
s = []
result = ['""']
p = []
for i in range(0, 2*n+1):
if i == 0:
p.append("")
elif i <=n:
p.append("(")
else:
p.append(")")
flag = True
for i in t:
if flag:
s.append(i)
flag = False
continue
if len(s) == 0:
s.append(i)
elif s[-1]<=n and i>n:
s.pop()
else:
s.append(i)
if len(s) == 0:
for i in t:
result.append(p[i])
result.append('"')
parentheses = ''.join(result)
if parentheses in pResult:
continue
else:
pResult.append(parentheses)
return pResult