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

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

  • 相关阅读:
    HashMap 和HashTable
    两种方式获得键盘录入
    打印流 printStream
    对象操作流--存储对象
    内存输出流
    序列流
    装饰设计模式
    递归
    IO流(使用指定的码表读写字符)
    IO-字符流 练习
  • 原文地址:https://www.cnblogs.com/iois/p/3939612.html
Copyright © 2011-2022 走看看