码迷,mamicode.com
首页 > 其他好文 > 详细

面试题 08.09. 括号

时间:2020-04-20 11:46:11      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:app   目标   条件   重复   过程   rate   pytho   打印   包含   

设计一种算法,打印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. 括号

标签:app   目标   条件   重复   过程   rate   pytho   打印   包含   

原文地址:https://www.cnblogs.com/USTC-ZCC/p/12736721.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!