非常好的一道题。一开始的思想是这样的,先把n对括号按照某一顺序生成一个string,然后用全排列算法生成所有可能,然后利用stack写一段判断括号是否匹配的字符串,匹配的假如结果中。不过会超时。因为全排列的复杂度略高,阶乘级别。而对于阶乘函数和指数函数的复杂度,显然是阶乘函数高,指数每次乘一个相同的数(这里是2),而阶乘每次乘一个更大的数.全排列算法复杂度会很大,超时也就不奇怪了。所以对于n对括号,有2n个位置,每个位置都有两种选择,所以一共是4的n次幂。leetcode显示超时也是从n=5开始的,可以想象,超时的原因就是因为5>4,阶乘超越了指数。再引入两个变量记录左括号的数量和右括号的数量,只要满足两个条件1.右括号的数目一定要小于左括号的数量2.左括号的数量和右括号的数量都不能超过n个。满足这两个条件就一定是匹配的。相当于一个非常巧妙的减枝。

#include<bits/stdc++.h>
using namespace std;
class Solution {
private:
vector<string>res;
string ans;
void permutation(int index,int n,int left,int right)
{
if (right > left||left>n||right>n)
return;
if (index == * n)
{
res.push_back(ans);
return;
}
ans.push_back('(');
permutation(index + , n,left+,right);
ans.pop_back();
ans.push_back(')');
permutation(index+, n,left,right+);
ans.pop_back();
return;
}
public:
vector<string> generateParenthesis(int n) {
permutation(,n,,);
return res;
}
};
/*int main()
{
vector<string>res;
res= class Solution().generateParenthesis(3);
for (int i = 0; i < res.size(); i++)
{
cout << res[i] << endl;
}
}*/

leetcode 22括号生成的更多相关文章

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

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

  2. Java实现 LeetCode 22 括号生成

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

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

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

  4. [LeetCode] 22. 括号生成

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

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

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

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

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

  7. leetcode 22. 括号生成 dfs

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

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

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

  9. Leetcode之回溯法专题-22. 括号生成(Generate Parentheses)

    Leetcode之回溯法专题-22. 括号生成(Generate Parentheses) 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n ...

随机推荐

  1. Fis3构建迁移Webpack之路

    Webpack从2015年9月第一个版本横空初始至今已逾2载.它的出现,颠覆了一大批主流构建如Ant.Grunt和Gulp等等.腾讯NOW直播IVWEB团队之前一直采用Fis构建,本篇文章主要介绍从F ...

  2. ZOJ Problem Set - 2014 Piggy-Bank【完全背包】

    Description Before ACM can do anything, a budget must be prepared and the necessary financial suppor ...

  3. - Fractal(3.4.1)

    C - Fractal(3.4.1) Time Limit:1000MS    Memory Limit:30000KB    64bit IO Format:%I64d & %I64u Su ...

  4. Red Hat6设置使用CentOS的yum源

    环境查看 red hat系统使用自己默认的yum源未注册在使用yum安装软件的时候会出现以下错误提示 可以修改成centos的yum源 卸载yum软件 rpm -qa|grep yum|xargs r ...

  5. cuteftp9破解及安装、使用

    一.破解: 参考:https://jingyan.baidu.com/article/ca00d56c4e43b2e99febcf70.html 1. 首先下载cuteftp替换文件及cuteftp9 ...

  6. 对iphone手机IMU的陀螺仪、加速度计、图像的时间戳做对齐处理

    https://blog.csdn.net/chishuideyu/article/details/77479758 加速度计和陀螺仪的时间戳一致 ros 的message filters可以做时间同 ...

  7. [No0000D7]img生成器.bat合并所有图片到html网页中

    @ECHO OFF IF EXIST %~nx0.html DEL /F /Q %~nx0.html ECHO ^<html^>^<head^>^<title^>% ...

  8. linux 之awk

    简介 awk是一个强大的文本分析工具,相对grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格 为默认分隔符将每行切片,切开的部分再 ...

  9. LeetCode 427 Construct Quad Tree 解题报告

    题目要求 We want to use quad trees to store an N x N boolean grid. Each cell in the grid can only be tru ...

  10. Python开发【笔记】:接口压力测试

    接口压力测试脚本 1.单进程多线程模式 # #!/usr/bin/env python # # -*- coding:utf-8 -*- import time import logging impo ...