括号生成-LeetCode
作者:互联网
题目:
原文链接:https://leetcode-cn.com/problems/generate-parentheses/
思路:
- 暴力法是递归生成所有组合方式,同时判断是否符合要求
- 回溯法,不需要在生成完整的组合之后再判断,因为在每一个位置最多有两种摆放方法:当前还有左括号剩余时,放置左括号;当前组合中已经放置的左括号的个数大于右括号个数时,放置右括号
- 然后回退一步,逆操作状态值(此处状态值为临时存储空间),查看接下来剩余哪种情况
代码:
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
标签:状态值,temp,back,生成,括号,result,放置,LeetCode 来源: https://blog.csdn.net/qq_35221523/article/details/112549797