括号生成

122 篇文章 2 订阅

括号生成1

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

示例:

输入:n = 3
输出:[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]


class Solution:
    def generateParenthesis(self, n: int):
        if n<=0:
            return []
        elif n==1:
            return ['()']
        s='('*n+')'*n        
        #s=''.join(sorted(s))
        a=['']
        d=[]
        for b in s:
            ta=[]
            for c in a:
                for i in range((c+b).index(b)+1):
                    ta.append(c[:i]+b+c[i:])
            a=ta
        
        for c in a:            
            if c[-1]==')' and c[0]=='(':
                e=0
                f='('
                for g in c:
                    if f==g:
                        e+=1
                    else:
                        e-=1
                    if e==0:
                        f='('
                    elif e<0:
                        break
                if e==0:
                    d.append(c)        
        return d

笔记:
全排列中,第一个为左括号、最后一个为右括号,且有效闭合括号对右边第一个为左括号的目标为解。
测试几次发现这个算法在n>10之后性能表现速降,而最快的递归提交范例类似结果则出现在n>12之后。


  1. 题目来源:力扣LeetCode ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值