LeetCode——22. 括号生成

22. 括号生成

题目

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

 

示例 1:

输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]

示例 2:

输入:n = 1
输出:["()"]
 

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/generate-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解思路

1>源代码

class Solution:
    def generateParenthesis(self, n: int) -> List[str]:
        ans = []
        def helper(temp_ans, left, right):
            if len(temp_ans)==2*n:
                ans.append(''.join(temp_ans))
                return
            if left<n:
                temp_ans.append('(')
                helper(temp_ans, left+1, right)
                temp_ans.pop()
            if right<left:
                temp_ans.append(')')
                helper(temp_ans, left, right+1)
                temp_ans.pop()
            return 
        helper([], 0, 0)
        return ans

2>算法介绍

本题又是一道经典的回溯算法题。由于题目要求构造括号,并且要求构造的括号是有效的,那么我们就可以去寻找规律:

如果左括号数量不大于n,我们可以放一个左括号。如果右括号数量小于左括号的数量,我们可以放一个右括号。

想明白了如上规律,我们直接采用回溯算法的格式编写代码即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值