括号生成-牛客
思路
- 递归
1)终止条件: 左右括号都使用了n个,将结果加入数组。
2)返回值: 每一级向上一级返回后续组装后的字符串,即子问题中搭配出来的括号序列。
3)本级任务: 每一级就是保证左括号还有剩余的情况下,使用一次左括号进入子问题,或者右括号还有剩余且右括号使用次数少于左括号的情况下使用一次右括号进入子问题。
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param n int整型
# @return string字符串一维数组
#
class Solution:
def generateParenthesis(self , n: int) -> List[str]:
# 递归与回溯
res=list()
temp=""
#递归
self.recursion(0, 0, temp, res, n)
return res
def recursion(self, left, right, temp, res, n):
#左右括号都用完了,加入结果数组
if left==n and right==n:
res.append(temp)
return
#左括号使用次数小于n,使用一次左括号
if left < n:
self.recursion(left+1, right, temp+"(", res, n)
#右括号使用次数小于n且右括号使用次数小于左括号,使用一次右括号
if right < n and left > right:
self.recursion(left, right+1, temp+")", res, n)