题目:
原文链接: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