给定n, 返回所有匹配的n对括号的可能形式. 如

给定 n = 3, 一个解集是:

"((()))", "(()())", "(())()", "()(())", "()()()"

本题解法的思路是

使用栈seq保存经历的字符串状态;

使用栈valid保存对应的字符串中有效的括号对个数;

当seq不为空时(即回溯未结束):

  当前的字符串和其中有效的括号对个数分别出栈;

  1. 如果字符串长度等于待求解的长度, 则将其加答案中;

  2. 如果字符串长度-有效括号对数小于最大括号对个数, 说明可以增加一个 "("; [有效括号对数代表已经放置的")", 这个差值代表已经放置的"("个数]

  3. 如果字符串长度大于成对的括号数, 说明需要加一个 ")", 并且有效括号对需要增加1; [说明有未配对的"("]

 class Solution {
public:
vector<string> generateParenthesis(int n) {
if (n == ) return vector<string> ();
stack<string> seq;
stack<int> valid;
vector<string> ans; seq.push("(");
valid.push();
while (!seq.empty()) {
string s = seq.top(); seq.pop();
int v = valid.top(); valid.pop();
if (s.length() == * n) {
ans.push_back(s);
continue;
}
if (s.length() - v < n) {
seq.push(s + "(");
valid.push(v);
}
if (v * < s.length()) {
seq.push(s + ")");
valid.push(v+);
}
}
return ans;
} };

[LeetCode系列]括号生成问题的更多相关文章

  1. LeetCode 22. 括号生成(Generate Parentheses)

    22. 括号生成 22. Generate Parentheses 题目描述 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n = 3,生成结 ...

  2. Java实现 LeetCode 22 括号生成

    22. 括号生成 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n = 3,生成结果为: [ "((()))", &quo ...

  3. leetcode 22括号生成

    非常好的一道题.一开始的思想是这样的,先把n对括号按照某一顺序生成一个string,然后用全排列算法生成所有可能,然后利用stack写一段判断括号是否匹配的字符串,匹配的假如结果中.不过会超时.因为全 ...

  4. [LeetCode] 22. 括号生成(回溯/DP)

    题目 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n = 3,生成结果为: [ "((()))", "(()( ...

  5. [LeetCode] 22. 括号生成

    题目链接:https://leetcode-cn.com/problems/generate-parentheses/ 题目描述: 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能 ...

  6. [LeetCode] 22. 括号生成 ☆☆☆(回溯)

    描述 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n = 3,生成结果为: [ "((()))", "(()( ...

  7. LeetCode 22. 括号生成(Generate Parentheses)

    题目描述 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n =3,生成结果为: [ "((()))", "(() ...

  8. leetcode 22. 括号生成 dfs

    先思考符合要求的串是什么样子的 任意时刻,(数量大于),且最后(==)==n即可 考虑下一个加入string的字符时(或者)即可 dfs class Solution { public: vector ...

  9. LeetCode 22. 括号生成 C++(回溯法)

      还是用回溯法暴力解题,遍历所有可能,不过还是在此基础上进行了一些的优化,来阻止那些不必要的遍历.好,上代码. class Solution { public: vector<string&g ...

随机推荐

  1. LoadBalancerv2的原理分析

    OpenStack 是直接采用各种开源可用的负载均衡项目来完成负载均衡的任务,默认使用 HAProxy.LBaaSv2 本质来说,其实也是根据用户提出的负载均衡要求,生成符合的HAProxy配置文件并 ...

  2. wxpython的简单的应用

    import wximport wx.xrc import pandas as pd from conf.env import * # 允许选择的文件wildcard = "Python s ...

  3. 【Html 学习笔记】第八节——表单实践

    列举一些实践的例子: 1.点击按钮后跳转: <html> <body> <form action="1.html"> First <inp ...

  4. idea解决mybatis逆向工程

    1.pom.xml <?xml version="1.0" encoding="UTF-8"?><project xmlns="ht ...

  5. [AirFlow]AirFlow使用指南二 DAG定义文件

    1. Example """ Code that goes along with the Airflow tutorial located at: https://git ...

  6. mysql动态扩容调研

    MySQL动态扩容方案 目前可用方案 MySQL的复制: 一个Master数据库,多个Salve,然后利用MySQL的异步复制能力实现读写分离,这个方案目前应用比较广泛,这种技术对于以读为主的应用很有 ...

  7. tomcat是否有必要配置环境变量

    之前发表了一篇关于如何安装和配置Tomcat的文章,而最近在开发项目的时候总是报错.后来被公司的大神问了一句:是谁告诉你Tomcat是需要配置环境变量的? 作为新手的我瞬间整个人都不好了!于是偷偷百度 ...

  8. 高德地图Demo运行报错 com.android.ide.common.process.ProcessException: Failed to execute aapt

    最近由于有需求去做导航方面的Android开发,很是无奈,以前也的确是没有搞过,领导开大会当着所有人的面说这是给我分配的第一个工作,无论如何要做好,突然间感觉压力好大,自己已经多年没有敲过代码,而且A ...

  9. stark组件02

    1.怎么在显示页面添加新字段(a标签)?在admin.py下注册就好了 当我们需要在admin页面添加新的a标签时,需要引入一个类似safe功能的模块 from django.utils.safest ...

  10. flexcan controller register

    /********************************************************************* * flexcan controller register ...