题解 | #括号生成#

括号生成

https://www.nowcoder.com/practice/c9addb265cdf4cdd92c092c655d164ca

在BM56基础上,加入剪枝操作:

  • 合法的括号顺序是,'(' 和 ')' 相互抵消后,排第一的一定是'(';
  • 令'('==1, ')'==-1,递归时保证,arr和>=0,就是合法的。
import copy
class Solution:
    # 设'('==1, ')'==-1,递归时保证arr的和>=0,就是合法的
    res = []
    def generateParenthesis(self , n: int) -> List[str]:
        num = []
        for i in range(n):
            num.append(1)
            num.append(-1)
        num.sort()
        mark = [0 for i in range(len(num))]
        arr = []
        self.full_permute(num,arr,mark)
        ans = []
        for l in Solution.res:  # 将1 -1转成( )
            s = []
            for n in l:
                s.append('(' if n==1 else ')')
            ans.append(''.join(s))
        return ans
    
    def full_permute(self,num,arr,mark):
        if len(arr) == len(num):
            Solution.res.append(copy.deepcopy(arr))
        for i in range(len(num)):
            # 判断是否已在arr中
            # 判断是否重复排列
            # 判断是否合法
            if mark[i]==1 or i>0 and num[i]==num[i-1] and mark[i-1]==0 or num[i]+sum(arr)<0:
                continue
            arr.append(num[i])
            mark[i]=1
            self.full_permute(num,arr,mark)
            arr.pop()
            mark[i]=0


全部评论

相关推荐

Southyeung:我说一下我的看法(有冒犯实属抱歉):(1)简历不太美观,给我一种看都不想看的感觉,感觉字体还是排版问题;(2)numpy就一个基础包,机器学习算法是什么鬼?我感觉你把svm那些写上去都要好一点。(2)课程不要写,没人看,换成获奖经历;(3)项目太少了,至少2-3个,是在不行把网上学习的也写上去。
点赞 评论 收藏
分享
自学java狠狠赚一...:骗你点star的,港卵公司,记得把star收回去
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务