题解 | #括号生成#

括号生成

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


全部评论

相关推荐

1个小白:可以考虑投一下字节
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务