题目描述
给出 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]
{ }