zoukankan      html  css  js  c++  java
  • 22. Generate Parentheses——本质:树,DFS求解可能的path

    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:

    [
      "((()))",
      "(()())",
      "(())()",
      "()(())",
      "()()()"
    ]
    
    class Solution(object):
        def generateParenthesis(self, n):
            """
            :type n: int
            :rtype: List[str]
    [ "((()))",
      "(()())",
      "(())()",
      "()(())",
      "()()()"]
       ()
       / 
     ()  ()
     /  / 
    () ()()()
            """
            ans = []
            path = []
            self.gen_par_helper(n*2, path, ans)
            return ans
        
        def is_valid_par(self, par):
            stack = []
            for c in par:
                if c == "(":
                    stack.append("(")
                else:
                    if stack:
                        stack.pop()
                    else:
                        return False
            return len(stack) == 0
        
        def gen_par_helper(self, n, path, ans):
            if n == 0:
                if self.is_valid_par(path):
                    ans.append("".join(path))
                return
            for c in "()":
                path.append(c)
                self.gen_par_helper(n-1, path, ans)
                path.pop()                        
    class Solution(object):
        def generateParenthesis(self, n):
            """
            :type n: int
            :rtype: List[str]
    [ "((()))",
      "(()())",
      "(())()",
      "()(())",
      "()()()"]
       ()
       / 
     ()  ()
     /  / 
    () ()()()
            """
            ans = []
            self.gen_par_helper(n, n, "", ans)
            return ans
        
        def gen_par_helper(self, left, right, path, ans):
            if left == 0 and right == 0:
                ans.append(path)
                return
            if left > 0:
                self.gen_par_helper(left-1, right, path+"(", ans)
            if right > 0 and right > left:
                self.gen_par_helper(left, right-1, path+")", ans)                        

    第二种更快,只是不那么容易想到!

  • 相关阅读:
    新加坡
    android alt + /
    豌豆荚开源技术
    有意思的
    android view
    localstorage性能
    Android WebView使用基础
    关于hash
    Android 近百个项目的源代码,覆盖Android开发的每个领域
    10个经典的Android开源项目(附源码包)
  • 原文地址:https://www.cnblogs.com/bonelee/p/6209381.html
Copyright © 2011-2022 走看看