题目:
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:
[ "((()))", "(()())", "(())()", "()(())", "()()()"]思考过程:
本题意在找出N对括号匹配的所有情况,解题思路为1、一对括号总是左括号先出现,不可能有多出来的单独的右括号。2、左括号和右括号的个数总是匹配的。
无论上一个字符是什么,接下来的字符都有可能是“(”和“)”两种情况,因此整个问题实际上是一个二叉树,根节点为“(”,接下来有“((”和“()”两个子节点,如此类推,只要把符合要求的节点记录下来,不符合的去掉则可,因为是N对括号,因此树的深度为2*n。
对于这样的2叉树我选择了用递归来处理,添加一些约束条件会使得不用完全生成整棵树。由于字符比较难处理,因此我选择使用1代表左括号,-1代表右括号。所以当1、整个list的和小于0时不在往下递归。2、list和为0且list个数为2*n则符合条件。
最后把得出的结果转换成字符串即可得到答案。
代码:
class Solution(object): def changeToParentheses(self,ans): result = [] for a in ans: string = "" for num in a: if num == 1: string+="(" else: string+=")" result.append(string) return result def test(self,ans,list_,num,n): import copy list_.append(num) if len(list_) == n*2 and sum(list_) == 0: ans.append(list_) elif len(list_) < n*2 and sum(list_) >= 0: self.test(ans,copy.copy(list_),1,n) self.test(ans,copy.copy(list_),-1,n) def generateParenthesis(self, n): """ :type n: int :rtype: List[str] """ ans = [] self.test(ans,[],1,n) return self.changeToParentheses(ans)
新闻热点
疑难解答