leetcode 26 括号生成:n对括号的合法排列-算法面试题 python

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))
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值