ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第97期-基础结构:字符串 括号生成

2022-01-06 21:04:34  阅读:114  来源: 互联网

标签:generateParenthesis List Solution 括号 字符串 数量 97


1 问题描述

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
有效括号组合需满足:左括号必须以正确的顺序闭合。

示例 1:

输入: n = 3
输出: ["((()))","(()())","(())()","()(())","()()()"]

示例 2:

输入: n = 1
输出: ["()"]

初始代码

from typing import List
class Solution:
    def generateParenthesis(self, n: int) -> List[str]:
        #在此之间填写代码

print(Solution().generateParenthesis(3))
print(Solution().generateParenthesis(1))
View Code

2 解题思路

  • 标签:字符串
  • 当前左右括号都有大于 0 个可以使用的时候,才产生分支;
  • 产生左分支的时候,只看当前是否还有左括号可以使用;
  • 产生右分支的时候,还受到左分支的限制,右边剩余可以使用的括号数量一定得在严格大于左边剩余的数量的时候,才可以产生分支;
  • 在左边和右边剩余的括号数都等于 0 的时候结算。

#3 解题方法

from typing import List
class Solution:
    def generateParenthesis(self, n: int) -> List[str]:
        a=[]
        b=''
        def x(b,i,j):
            if i==j==n:a.append(b[:])
            if i<j:return
            if i<=n:
                x(b+'(',i+1,j)
            if j<=n:
                x(b+')',i,j+1)
        x(b,0,0)
        return a

print(Solution().generateParenthesis(3))
print(Solution().generateParenthesis(1))
View Code

第1-3,16-17行: 题目中已经给出的信息,运行代码时要根据这些代码进行编辑
第4行: 定义空列表a用于存放结果
第5行: 定义空字符串b用于表示每个可能的字符串结果
第6行: 创建函数x,内部变量分别为字符串b,左括号数量i,右括号数量j
第7行: 若左右括号数量都等于n时,在列表a中加入当前字符串的副本
第8行: 若左括号数量小于右括号数量(比如()))时,不符合括号结合规律,结束本次函数
第9-10行: 当左括号数量小于等于n时,给字符串b加上左括号并进行下次函数
第11-12行: 当右括号数量小于等于n时,给字符串b加上右括号并进行下次函数
第13-14行: 使用函数x并返回最后得到的列表a

代码运行结果为:
image.jpg

标签:generateParenthesis,List,Solution,括号,字符串,数量,97
来源: https://www.cnblogs.com/lg03/p/15772810.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有