zoukankan      html  css  js  c++  java
  • LeetCode 22. 括号生成

    又到了休息大脑时间,抽空刷一题,然而每次做了都好像不是在休息大脑,是在勒紧.......

    题目:


    数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

    示例:

    输入:n = 3
    输出:[
           "((()))",
           "(()())",
           "(())()",
           "()(())",
           "()()()"
         ]
    

    思路:

    挣扎半天写不出来关系式的确认关系,只好去题解取经,Q_Q 摘自题解大大的一个图。

    很明显这个题目需要用到递归回溯,判断回溯很简单,拿到一个问题,你感觉如果不穷举一下就没法知道答案,那就可以开始回溯了。

    一般回溯的问题有三种:

    1. Find a path to success 有没有解
    2. Find all paths to success 求所有解
      • 求所有解的个数
      • 求所有解的具体信息
    3. Find the best path to success 求最优解

    方法一:

    左括号'('出现的次数取决于n,右括号')'出现取决于左括号出现的数量要大于右括号。

    class Solution(object):
        def generateParenthesis(self, n):
            """
            :type n: int
            :rtype: List[str]
            """
            res=[]
            self.dfs(res,n,n,'')
            return res
        def dfs(self,res,left,right,path):
            if left ==0 and right==0:
                res.append(path) 
            if left >0:
                self.dfs(res,left-1,right,path+'(')
            if left<right:
                self.dfs(res,left,right-1,path+')')
    

    执行用时:24 ms, 在所有 Python 提交中击败了54.54%的用户

    内存消耗:12.9 MB, 在所有 Python 提交中击败了11.11%的用户

  • 相关阅读:
    SQL 语法总结
    终于开始用github了
    前端开发第一阶段总结
    windows系统快捷操作の高级篇
    windows系统快捷操作の进阶篇
    windows系统快捷操作の基础篇
    安装使用ubuntu问题汇总
    十进制转任意进制
    任意进制转10进制
    爬取妹子图(requests + BeautifulSoup)
  • 原文地址:https://www.cnblogs.com/xiaoqiangink/p/13372840.html
Copyright © 2011-2022 走看看