括号生成-LeetCode

题目:

在这里插入图片描述
原文链接:https://leetcode-cn.com/problems/generate-parentheses/

思路:

  1. 暴力法是递归生成所有组合方式,同时判断是否符合要求
  2. 回溯法,不需要在生成完整的组合之后再判断,因为在每一个位置最多有两种摆放方法:当前还有左括号剩余时,放置左括号;当前组合中已经放置的左括号的个数大于右括号个数时,放置右括号
  3. 然后回退一步,逆操作状态值(此处状态值为临时存储空间),查看接下来剩余哪种情况

代码:

class Solution:
    def generateParenthesis(self, n: int) -> List[str]:
        result = []
        if n<=0: return result
        def back(temp, left, right):
            # 满足组合长度的条件,不需要判断是因为组合生成的方式保证了合理性
            if len(temp) == 2*n:
                result.append(''.join(temp))
                return
            # 还有左括号剩余
            if left<n:
                temp.append('(')
                back(temp, left+1, right)
                # 逆操作状态值
                temp.pop()
            # 已使用的左括号的个数大于右括号,说明此时放入右括号一定有左括号与其匹配
            if left>right:
                temp.append(')')
                back(temp, left, right+1)
                temp.pop()
        back([], 0, 0)
        return result

猜你喜欢

转载自blog.csdn.net/qq_35221523/article/details/112549797