LeetCode 22. Generate Parentheses 生成括號 Python 回溯解法
阿新 • • 發佈:2019-02-05
題目描述
Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
給定n對括號,寫一個函式來生成成對的括號的所有組合。
For example, given n = 3, a solution set is:
[ “((()))”, “(()())”, “(())()”, “()(())”, “()()()” ]
解法#1
如果左括號還有剩餘,則可以放置左括號,如果右括號的剩餘數大於左括號,則可以放置右括號。
class Solution:
# @param an integer
# @return a list of string
def generateParenthesis(self, n):
res = []
self.generate(n, n, "", res)
return res
def generate(self, left, right, str, res):
if left == 0 and right == 0:
res.append(str)
return
if left > 0:
self.generate(left - 1, right, str + '(', res)
if right > left:
self.generate(left, right - 1, str + ')', res)
解法#2
回溯中每次遍歷字串s尋找右括號,若右括號在位置i,在此之前的字串左括號數大於右括號數,且前一個字元為左括號,則與前一字元交換。
class Solution(object):
result_list = []
def generateParenthesis(self, n):
global result_list
def generate(s):
global result_list
new_s = s
left = right = 0
for i in range(n * 2):
if s[i] == '(':
left += 1
else:
right += 1
if left > right and s[i - 1] == '(':
new_s = s[:i - 1] + s[i:i + 1] + s[i - 1:i] + s[i + 1:]
if new_s not in result_list:
result_list += [new_s]
generate(new_s)
s = '(' * n + ')' * n
result_list = [s]
generate(s)
return result_list