面试题 08.09. 括号
Posted ustc-zcc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试题 08.09. 括号相关的知识,希望对你有一定的参考价值。
设计一种算法,打印n对括号的所有合法的(例如,开闭一一对应)组合。
说明:解集不能包含重复的子集。
例如,给出 n = 3,生成结果为:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
res = [] # 定义结果变量
state = "" # 定义状态变量
def get_res(state,p,q):
if p > q: # 不满足合法条件
return
elif len(state) == 2*n: # 达成最终目标的结果
res.append(state)
return
if p>0: # 满足执行条件
get_res(state+"(",p-1,q)
if q>0: # 满足执行条件
get_res(state+")",p,q-1)
get_res(state,n,n)
return res
说明: p是左括号的剩余个数,q是右括号的剩余个数。
递归过程就是。如果左括号还有剩余,那就试试左括号;如果右括号还有剩余,那就试试右括号。
stack是当前字符串,试哪个括号就要在后面加哪个括号。如果试左括号,p就减1,因为用掉了一个;如果试右括号,q就减1。
以上是关于面试题 08.09. 括号的主要内容,如果未能解决你的问题,请参考以下文章