算法w11—— Generate Parentheses

题目:leetcode.22  Generate Parentheses

链接:https://leetcode.com/problems/generate-parentheses/#/description

原题:

Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.

For example, given n = 3, a solution set is:

[
  "((()))",
  "(()())",
  "(())()",
  "()(())",
  "()()()"
]
解题思路:

这周稍微回顾一下深搜,做题比较入门的找回感觉。看到题目很容易理解,找出所有括号配对的方法,一个简单的深搜就能搞定。大家可以把它理解成一个二叉树,简单来说每一层向下有两个选择,一个是填入左括号,另一个是填入右括号,但是并不是每一层都可以填入左括号或者右括号,左括号有数量限制就是n,右括号的限制就是目前数目不能多于左括号的数目。根据这两个条件去递归深搜,代码非常容易写出来。

下面展示两份代码,一份是自己写的,另一份是别人写的简洁版,膜拜一下别人的代码风格。


代码:

class Solution(object):
    def generateParenthesis(self, n):
        """
        :type n: int
        :rtype: List[str]
        """
        ans = []
        now = '('
        self.cal_sol(n, ans, now, n-1, n)
        return ans
        
    def cal_sol(self, n, ans, now, left_num, right_num):
        if len(now) == 2*n:
            ans.append(now)
            return
        if left_num != 0:
            self.cal_sol(n, ans, now+'(', left_num-1, right_num)
        if left_num < right_num:
            self.cal_sol(n, ans, now+')', left_num, right_num-1)
        return

def generateParenthesis(self, n):
    def generate(p, left, right, parens=[]):
        if left:         generate(p + '(', left-1, right)
        if right > left: generate(p + ')', left, right-1)
        if not right:    parens += p,
        return parens
    return generate('', n, n)

def generateParenthesis(self, n, open=0):
    if n > 0 <= open:
        return ['(' + p for p in self.generateParenthesis(n-1, open+1)] + \
               [')' + p for p in self.generateParenthesis(n, open-1)]
    return [')' * open] * (not n)



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值