Leetcode_22【括号生成】

文章目录:

  • 题目
  • 脚本一
  • 脚本一逻辑
  • shell脚本分享

题目:

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

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

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


脚本一:【用时:36ms】

class Solution:
    def generateParenthesis(self, n: int) -> List[str]:
        lists = []
        if n >0 and not lists :lists.append("(")
        while lists:
            zuo = lists[0].count("(")
            you = lists[0].count(")")
            if zuo > you:
                if zuo == n:
                    lists.append(lists[0]+")")
                    lists.pop(0)
                else:
                    lists.append(lists[0] + ")")
                    lists.append(lists[0] + "(")
                    lists.pop(0)
            else:
                if zuo == n:
                    return(lists)
                else:
                    lists.append(lists[0] + "(")
                    lists.pop(0)

脚本一逻辑:

  • 括号生成的处理思路是:
    • 第一:无论从那个位置从左往右算起,左括号的数量一定要大于或等于右括号,如(()和(())
    • 第二:在左括号的数量小于目标数n时,则可以在此元素的基础上加上一个左括号(和在此元素上添加右括号")"组成新的两个元素,然后再把旧元素删除
    • 第三:在左括号的数量等于目标数n时,则只能在此元素的基础上加上一个右括号")",然后再把旧元素删除
    • 第四:在第三的基础上,如果左括号的数量等于右括号的数量,则可以停止循环,并返回结果了

shell解题分享:

https://blog.csdn.net/weixin_43428906/article/details/102790053

此链接是笔者较早时间使用shell解决此题的文章,分享给有兴趣的朋友

原文地址:https://www.cnblogs.com/mailong/p/12037807.html