1. 程式人生 > >LeetCode 22. Generate Parentheses 生成括號 Python 回溯解法

LeetCode 22. Generate Parentheses 生成括號 Python 回溯解法

題目描述

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