leetcode 26 括号生成:n对括号的合法排列-算法面试题 python
规律:左括号个数>=右括号的个数
解题思路:
假设在位置k我们还剩余left个左括号和right个右括号
如果left和right均为零,则说明我们已经完成一个合法排列,可以将其打印出来
如果left>0,打印左括号
如果right>0 并且 right>left 打印右括号
def brackets_rank(count):
"""
n对括号的合法排列组合
params:
count->括号个数
return:
value->合法排列集合
"""
value = set() # set去重
if count == 1: # base case
value = {'()'}
else:
for item in brackets_rank(count - 1): # 遍历上一次组合
for i, val in enumerate(item): # 遍历组合中的元素
if val is '(': # 如果是'(',后面插入'()'
value.add('()'.join([item[:i+1], item[i+1:]]))
value.add('()'+item) # 对组合后面插入'()'
#return value
return value
if __name__ == '__main__':
count = int(input('请输入括号个数'))
value = brackets_rank(count)
num = len(value)
print(value)
print("共{}种".format(num))