22. Generate Parentheses
可以发现,结果需要满足两个要求:
含有 n 个左括号和 n 个右括号(必须pair)
必须先出现左括号再出现右括号
根据 2 可以想到,应该是根据状态开关来生成合格结果,f(n) 根据 f(n-1) 来生成,那不是 bfs 就是 dp
12/30/2020 Update:
一看就可以backtracking
,既然有左右括号总数限制(都==n),需要 keep track of 已使用的左右括号数量、已经生成的 pattern,测试到 qualified 就直接记录return,没有就继续探索其他。
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
res = []
q = collections.deque([("(", 1, 0)])
while q:
com, l, r = q.popleft()
op = l>r
if len(com) == 2*n:
res.append(com)
elif op:
if l < n:
q.append((com+"(", l+1, r))
q.append((com+")", l, r+1))
elif not op and l < n:
q.append((com+"(", l+1, r))
return res
Last updated
Was this helpful?