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%的用户

  • 相关阅读:
    Silverlight 5 新特性
    熊市也要活命!高手总结熊市十大生存定律
    WEB服务器硬件配置要求
    你感冒了吗?——风寒来袭全攻略[转]
    看懂此文 你离赚钱就不远了
    开盘尾盘趋势定性法
    感冒全过程
    职业推手自曝微博炒作内幕 十万水军任你调遣!
    股票买卖规则
    通过均线找到牛股
  • 原文地址:https://www.cnblogs.com/xiaoqiangink/p/13372840.html
Copyright © 2011-2022 走看看