leetcode.22 - 括号生成

作者: 半亩房顶 | 来源:发表于2019-04-01 18:28 被阅读3次

    题目

    给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。

    例如,给出 n = 3,生成结果为:

    [
      "((()))",
      "(()())",
      "(())()",
      "()(())",
      "()()()"
    ]
    

    思路

    递归法

    1、def dfs(res, string, n, l, r):,递归函数的参数意义分别为,返回用的结果列表res,当前括号匹配字符串string,括号对数n,目前左括号数l,目前右括号数r。
    2、左括号数等于括号对数时,只需加入剩余右括号,当前匹配字符串括号匹配结束,加入res。
    3、左括号等于右括号或者当前一个括号也没有时只能加入左括号,并把左括号数+1。
    4、其他情况既能加入左括号又能加入右括号,且把相应的符号数+1。

    回溯法

    1、基础字符串为'((()))'
    2、遍历字符串,当字符串中存在一个右括号位置为i,而且满足,0到i的字符串中,左括号数大于右括号数、第i-1位置是左括号时,将i-1与i位置的括号互换(即一组左右括号互换)

    代码

    //递归法
    class Solution:
        def generateParenthesis(self, n):
            res = []
            def dfs(res, string, n, l, r):
                if l == n:
                    for i in range(r, n):
                        string += ')'
                    res.append(string)
                    return
                elif l == 0 or l == r:
                    string +='('
                    dfs(res, string, n, l + 1, r)
                else:
                    dfs(res, string + ')', n, l, r + 1)
                    dfs(res, string + '(', n, l + 1, r)
            dfs(res, '', n, 0, 0)
            return res
    
    //回溯法
    class Solution(object):
        result_list = []
        def generateParenthesis(self, n):
            global result_list
            def generate(s):
                global result_list
                new_s = s
                left = right = 0
                for i in range(n * 2):
                    if s[i] == '(':
                        left += 1
                    else:
                        right += 1
                        if left > right and s[i - 1] == '(':
                            new_s = s[:i - 1] + s[i:i + 1] + s[i - 1:i] + s[i + 1:]
                            if new_s not in result_list:
                                result_list += [new_s]
                                generate(new_s)
            s = '(' * n + ')' * n
            result_list = [s]
            generate(s)
            return result_list
    

    以上

    欢迎大家关注我的公众号


    半亩房顶

    相关文章

      网友评论

        本文标题:leetcode.22 - 括号生成

        本文链接:https://www.haomeiwen.com/subject/xyxbbqtx.html