Generate Parentheses
题目描述
Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
For example, given n = 3
, a solution set is:
"((()))", "(()())", "(())()", "()(())", "()()()"
解题方法
一开始没有什么头绪,但是做到一道也是parentheses的题目,是valid parentheses,是将(
存在stack来解决。
大概想到的思路是在从开头开始的string里,(
的数量都应该比)
的数量多,而且可以一直加入(
。所以如果我们
从左往右构建的话,就应该遵循这种规则,直到用完所有的pair.
pair的数量为n
,那么从左往右的过程中,只有两种选择,(
或者)
, 加入哪种的选择规则是
- 如果
(
的数量小于n
,就还可以加入(
- 如果
(
的数量大于)
, 就可以加入)
而为了产生所有的组合,而且这是有顺序的,就应该像subsets那样用dfs的方法做
Solution
class Solution(object):
def generateParenthesis(self, n):
"""
:type n: int
:rtype: List[str]
"""
if not n:
return []
results = []
self.helper(n, results, 0, 0, [])
return results
def helper(self, n, results, leftP, rightP, curList):
if len(curList) == n * 2:
newStr = "".join(curList)
results.append(newStr)
if leftP < n:
curList.append('(')
self.helper(n, results, leftP+1, rightP, curList)
curList.pop()
if leftP > rightP:
curList.append(')')
self.helper(n, results, leftP, rightP + 1, curList)
curList.pop()