leetcode-22-括号生成
题目描述:

方法一:暴力
class Solution(object): def generateParenthesis(self, n): 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
方法二:回溯
class Solution: def generateParenthesis(self, n: int) -> List[str]: ans = [] def backtrack(S='',left=0,right=0): if len(S)==2*n: ans.append(S) return if left < n: backtrack(S+"(",left+1,right) if right<left: backtrack(S+")",left,right+1) backtrack() return ans
方法三:闭包
class Solution(object): def generateParenthesis(self, N): if N == 0: return [''] ans = [] for c in range(N): for left in self.generateParenthesis(c): for right in self.generateParenthesis(N-1-c): ans.append('({}){}'.format(left, right)) return ans
浙公网安备 33010602011771号