题
面试题 08.09. 括号
括号。设计一种算法,打印n对括号的所有合法的(例如,开闭一一对应)组合。
说明:解集不能包含重复的子集。
例如,给出 n = 3,生成结果为:
[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]
解题思路
思路是:一次递归值确定一个位置,遇到可以多选择地方 求其和
代码
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
return self.doIt(n, n, '')
def doIt(self, open_need: int, close_need: int, data: str) -> List[str]:
if open_need==close_need==0:
return [data]
if open_need==close_need:
return self.doIt(open_need-1,close_need,data+'(')
# 其他情况求全部
ans=[]
if open_need>0:
ans+=self.doIt(open_need-1,close_need,data+'(')
if open_need<close_need:
ans+=self.doIt(open_need,close_need-1,data+')')
return ans