22.括号生成
题目描述
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例
输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]
思路
字符串开头必定是‘(’,只要已有的字符串中‘(’多于‘)’就可以增加‘)’否则 ,只能增加‘(’
算法
1.将‘(’作为开头,入栈
2.判断能不能放‘)’如果可以,则入栈
3.放‘(’,入栈
4.返回
代码
class Node:
def __init__(self,s='', l = 0, r = 0):
self.s = s
self.l = l
self.r = r
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
if n == 1:
return ['()']
node = Node('(',n-1,n)
spark = [node]
res = []
while spark:
now = spark.pop()
if now.r == 1:
res.append(now.s+'()')
else:
if now.l == 1:
res.append(now.s+'('+')'*now.r)
else :
spark.append(Node(now.s+'(',now.l-1,now.r))
if now.l<now.r:
spark.append(Node(now.s+')',now.l,now.r-1))
return res
题目来源
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/generate-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。