leetcode(22)括号生成——官方解法三(闭合数)

题目描述给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出 n = 3,生成结果为:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]解题思路设所求序列为S[n],记其序号为n,则S[n]可以来自于之前求出的序列的组合再加上左右括号。比如 n = 3 时,我们要求3对括号能组成的有效...
摘要由CSDN通过智能技术生成

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

例如,给出 n = 3,生成结果为:
[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]

解题思路
设所求序列为S[n],记其序号为n,则S[n]可以来自于之前求出的序列的组合再加上左右括号。

比如 n = 3 时,我们要求3对括号能组成的有效组合,现在我们先摆好1对括号“ ()”,思考是否能利用之前的组合填充这个括号,使其组成3对括号? 可以得出这个填充是: “(2对括号的有效组合)”,“(1对括号的有效组合)1对括号的有效组合”,“()2对括号的有效组合”。

不用考虑“2对括号的有效组合()”,因为已经包含在上述情况“(1对括号的有效组合)1对括号的有效组合”。

将S[n]表示为“(左序列)右序列 ” ,并且左右序列的序号之和为n-1,即 S[n] = { ‘(’ + S[n-1] + ‘)’ + S[0] , ‘(’ + S[n-2] + ‘)’ + S[1] , ‘(’ + S[n-2] + ‘)’ + S[1] … ‘(’ + S[0]+ ‘)’ + S[n - 1] } 可知S[0] = “” ;

S[0] S[1] S[2]
{ }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值