Generate Parentheses
午睡醒敲到3点钟,搞了一个多小时。
应该是一种 非递归 的实现方法吧。
例如,4个括号的情况,可以看成是:
(3个括号的情况 连接上 1个括号的情况)+(2个括号的情况 连接上 2个括号的情况)+(1个括号的情况 连接上 3个括号的情况) + (‘(’ 连接上 3个括号的情况 连接上 ‘)’);
只是这样会每次产生重复的项,要先去掉,才能给下一次调用使用。
class Solution():
def generateParenthesis(self, n):
dp=[]
for i in range(n):
temp=[]
if i==0:
dp.append(['()'])
else:
for k in range(i):
for m in dp[k]:
for n in dp[i-k-1]:
temp.append(m+n)
for o in dp[i-1]:
temp.append('('+o+')')
dp.append(self.delRepetition(temp))
return dp[i]
def delRepetition(self,A):
# A : list
k=len(A)-1
while k>0:
for l in range(k):
if A[k] == A[l]:
del A[k]
break
k-=1
return A
if __name__=='__main__':
s=Solution()
print(s.delRepetition([1,1,1,2,2,2,3,3,5]))#test delRepetition()
print(s.generateParenthesis(4))
一直通不过,最后发现是因为剔除重复项的函数写错了。
ps:看了一些网上别人写的,有好多更好的方法,自己写的就比较复杂了。
欢迎指出不足之处与讨论。

浙公网安备 33010602011771号