description
给定括号的个数n,编写程序生成所有格式正确的括号组合。
输入格式
输入一个整数。
输出格式
输出为一个列表,每个元素是一个字符串,表示一个可能的括号组合。
输入输出示例
code
- 我使用深度优先的算法遍历所有情况然后对符合题意得情况进行判断
# 判断是否格式正确
def judge(ls):
lflag = 0
rflag = 0
for item in ls:
if item == '(':
lflag += 1
elif item == ')':
rflag += 1
if rflag > lflag: # 如果右括号比较多,直接返回false
return False
if lflag == rflag:
return True
def dfs(ch, level):
global n, ls, res
ls += ch
if level == n*2: # 可以判断了
if judge(ls):
res.append(copy.deepcopy(ls)) # 深度复制
return
else:
dfs('(', level+1)
ls = ls[:-1]
dfs(')', level+1)
ls = ls[:-1]
n = eval(input())
ls = ''
res = []
dfs('(', 1) # 从第二个符号开始#第一个一定是左括号
print(res)
# 3
# ['((()))', '(()())', '(())()', '()(())', '()()()']
summary
- 深度拷贝需要引入 copy模块