Leetcode 22 括号生成

简介: Leetcode 22 括号生成

题目 括号生成


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


示例:


输入:n = 3


输出:[


“((()))”,


“(()())”,


“(())()”,


“()(())”,


“()()()”


]


题解


  1. 1.使用暴力枚举的方法列出所有的生成括号的情况然后,通过判断 isvalid 来将结果添加到result中
class Solution:
    def generateParenthesis(self, n: int) -> List[str]:
        def generate(A):
            if len(A) == 2*n:
                if valid(A):
                    ans.append("".join(A))
            else:
                A.append('(')
                generate(A)
                A.pop()
                A.append(')')
                generate(A)
                A.pop()
        def valid(A):
            bal = 0
            for c in A:
                if c == '(': bal += 1
                else: bal -= 1
                if bal < 0: return False
            return bal == 0
        ans = []
        generate([])
        return ans

时间复杂度: O(2^2n * n)


空间复杂度:O(n)


2.

class Solution:
    def generateParenthesis(self, n: int) -> List[str]:
        res = []
        def generate(left, right, n, s):
            if left == n and right == n:
                res.append(s)
            if left < n: generate(left+1, right, n, s + '(')
            if right < left: generate(left, right + 1, n, s +')')
        generate(0, 0, n, '')
        return res

这种办法为回溯 + 剪枝的方法,通过条件排除了右括号多余左括号的情况


时间复杂度: O(N)


空间复杂度: O(N)

相关文章
|
2月前
|
存储 C语言 索引
环形链表、环形链表 II、有效的括号​​​​​​​【LeetCode刷题日志】
环形链表、环形链表 II、有效的括号​​​​​​​【LeetCode刷题日志】
|
4月前
leetcode-301:删除无效的括号
leetcode-301:删除无效的括号
19 0
|
4月前
|
Java C++ Python
leetcode-20:有效的括号
leetcode-20:有效的括号
34 0
|
5月前
|
测试技术
LeetCode | 20.有效的括号(C语言版)
LeetCode | 20.有效的括号(C语言版)
42 0
LeetCode | 20. 有效的括号
LeetCode | 20. 有效的括号
|
3天前
leetcode代码记录(有效的括号
leetcode代码记录(有效的括号
9 1
|
4月前
|
Go
golang力扣leetcode 301.删除无效的括号
golang力扣leetcode 301.删除无效的括号
34 0
|
2月前
|
算法 安全 Java
【数据结构与算法】6、栈(Stack)的实现、LeetCode:有效的括号
【数据结构与算法】6、栈(Stack)的实现、LeetCode:有效的括号
22 0
|
3月前
|
Java
|
3月前
LeetCode题 338比特位计数,20有效的括号,415字符串相加
LeetCode题 338比特位计数,20有效的括号,415字符串相加
36 0

热门文章

最新文章