面试题 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. 括号的主要内容,如果未能解决你的问题,请参考以下文章

最强解析面试题:合法序括号序列判断

前端面试题之手写promise

括号常考面试题

北京易贸创想软件面试题

Java工程师面试题,二级java刷题软件

链表题 面试题02.04. 分割链表290. 单词规律20. 有效的括号