zoukankan      html  css  js  c++  java
  • 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:看了一些网上别人写的,有好多更好的方法,自己写的就比较复杂了。

     欢迎指出不足之处与讨论。

  • 相关阅读:
    rabbitmq 学习
    linux下安装rabbitmq 集群
    excel中将时间戳转换为日期格式
    python实现批量修改服务器密码
    python 根据字典的键值进行排序
    python字符串的拼接
    python的变量
    python基础1
    【性能分析】使用Intel VTune Amplifier
    【vim】搜索与替换
  • 原文地址:https://www.cnblogs.com/iois/p/3939612.html
Copyright © 2011-2022 走看看