求n对括号总共可以生成多少组合理的括号对
例如3对(),总共可以生成5组括号对:['((()))', '(()())', '(())()', '()(())', '()()()']
题目分析:
有效的括号需要满足条件:
括号数量匹配 && 不会出现不匹配的括号情况
1、起始有 n 个左括号和 n 个右括号需要拼接到字符串中。
2、先将结果字符串初始化为空。
3、每次递归时,选择其中一种括号,拼接到结果字符串的最右边。分为两种情况:
(1)如果剩余左括号和右括号的数量相等,那么下一步只能放左括号
(2)如果剩余右括号多于左括号,那么既可以放左括号,又可以放右括号
不可能出现左括号多于右括号的情况。
4、直至没有剩余括号为止。
比如:需要放两对括号,则
1、首先,只能放左括号,结果为'('
2、现在剩下 1 个左括号和 2 个右括号,因此两个都可以放,结果为 '()' 和 '(('
3、现在结果集有两种情况了,
(1)对于 '()',还剩下各1种括号,因此只能放左括号,得到 '()('
(2)对于 '((',还剩下2个右括号,因此既可以放左又可以放右,但是左括号剩余0个,因此只能放右括号,得到 '(()'
代码如下:
#coding:utf-8
# 题目描述:
# 给定一个整数n,确定n 对括号()一共可以组合成为几种有效的括号
global result
def find_bracket(left, right, bracket_str):
"""
"""
global result
if left == 0 and right == 0:
result.append(bracket_str)
if left > right:
return
if left > 0:
find_bracket(left - 1, right, bracket_str + '(')
if right > 0:
find_bracket(left, right - 1, bracket_str + ')')
def run(n):
"""
"""
global result
result = []
bracket_str = ""
find_bracket(n, n, bracket_str)
print(result)
if __name__ == "__main__":
n = 3
run(n)