22. Generate Parentheses

 . Generate Parentheses
Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.

For example, given n = , a solution set is:

[
  "((()))",
  "(()())",
  "(())()",
  "()(())",
  "()()()"
]
class Solution(object):
    def generateParenthesis(self, n):
        """
        :type n: int
        :rtype: List[str]
        """
        if n == 0: return ['']
        ans = []
        for c in xrange(n):
            for left in self.generateParenthesis(c):
                for right in self.generateParenthesis(n-1-c):
                    ans.append('({}){}'.format(left, right))
        return ans
class Solution(object):
    # Brute Force
    def generateParenthesis(self, n):
        def generate(A=[]):
            if len(A) == 2 * n:
                if valid(A):
                    ans.append("".join(A))
            else:
                A.append('(')
                generate(A)
                A.pop()
                A.append(')')
                generate(A)
                A.pop()

        def valid(A):
            bal = 0
            for c in A:
                if c == '(':
                    bal += 1
                else:
                    bal -= 1
                if bal < 0: return False
            return bal == 0

        ans = []
        generate()
        return ans

# Backtracking
    def generateParenthesis2(self, N):
        ans = []

        def backtrack(S='', left=0, right=0):
            if len(S) == 2 * N:
                ans.append(S)
                return
            if left < N:
                backtrack(S + '(', left + 1, right)
            if right < left:
                backtrack(S + ')', left, right + 1)

        backtrack()
        return ans

# Closure Number
    def generateParenthesis3(self, N):
        if N == 0: return ['']
        ans = []
        for c in range(N):
        # for c in xrange(N):
            for left in self.generateParenthesis(c):
                for right in self.generateParenthesis(N - 1 - c):
                    ans.append('({}){}'.format(left, right))
        return ans

sn = Solution()
print(sn.generateParenthesis(3))

print(sn.generateParenthesis2(3))

print(sn.generateParenthesis3(3))

xrange and format

最新文章

  1. Migrate Instance 操作详解 - 每天5分钟玩转 OpenStack(40)
  2. UITableView的使用
  3. Attendance
  4. win commands
  5. Node.js脚本杀掉占用端口的进程
  6. UVA 11925 - Generating Permutations
  7. hdu3452 无向树去掉最小的边集使不论什么叶子与根不连通 / 最小割
  8. 读书笔记 effective c++ Item 5 了解c++默认生成并调用的函数
  9. TeamCity : Build 失败条件
  10. 菜鸟的 Sass 学习笔记
  11. 我的Spring学习记录(一)
  12. Java断言(Assertion)
  13. 测试开发之前端——No6.HTML5中的键盘事件
  14. ruby学习--条件控制
  15. 如何在内网安装compass
  16. jQuery 实现前端模糊匹配与首字母搜索
  17. 寻找重复的子树 Find Duplicate Subtrees
  18. c#开发sqlite
  19. Java I/O系列汇总
  20. Linux下生成随机密码(转)

热门文章

  1. linux利用CMakeLists编译cuda程序
  2. LOJ2251 [ZJOI2017] 树状数组【线段树】【树套树】
  3. hdu 2159 FATE (二维完全背包)
  4. 我的SSH框架实例(附源码)
  5. HDOJ5551 Huatuo&#39;s Medicine
  6. SCOI 2015 Day2 简要题解
  7. 【Luogu4916】魔力环(Burnside引理,组合计数)
  8. 自写juqery插件实现左右循环滚动效果图
  9. iptables(4)规则编写
  10. [WC2011]最大XOR和路径(贪心+线性基)