leetcode 22括号生成
非常好的一道题。一开始的思想是这样的,先把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括号生成的更多相关文章
- LeetCode 22. 括号生成(Generate Parentheses)
22. 括号生成 22. Generate Parentheses 题目描述 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n = 3,生成结 ...
- Java实现 LeetCode 22 括号生成
22. 括号生成 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n = 3,生成结果为: [ "((()))", &quo ...
- [LeetCode] 22. 括号生成(回溯/DP)
题目 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n = 3,生成结果为: [ "((()))", "(()( ...
- [LeetCode] 22. 括号生成
题目链接:https://leetcode-cn.com/problems/generate-parentheses/ 题目描述: 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能 ...
- [LeetCode] 22. 括号生成 ☆☆☆(回溯)
描述 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n = 3,生成结果为: [ "((()))", "(()( ...
- LeetCode 22. 括号生成(Generate Parentheses)
题目描述 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n =3,生成结果为: [ "((()))", "(() ...
- leetcode 22. 括号生成 dfs
先思考符合要求的串是什么样子的 任意时刻,(数量大于),且最后(==)==n即可 考虑下一个加入string的字符时(或者)即可 dfs class Solution { public: vector ...
- LeetCode 22. 括号生成 C++(回溯法)
还是用回溯法暴力解题,遍历所有可能,不过还是在此基础上进行了一些的优化,来阻止那些不必要的遍历.好,上代码. class Solution { public: vector<string&g ...
- Leetcode之回溯法专题-22. 括号生成(Generate Parentheses)
Leetcode之回溯法专题-22. 括号生成(Generate Parentheses) 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n ...
随机推荐
- day4 四、流程控制之if判断、while循环、for循环
一.if判断 1.语法一: if 条件: 条件成立时执行的子代码块 代码1 代码2 代码3 示例: sex='female' age= is_beautiful=True and age < a ...
- AIX装机问题123
好久没有实施,好记性不如好笔记,那就记录下吧 1文件系统创建挂载 通过smit工具很容易简单举例创建一个jfs2类型文件系统并挂载 创建lv smit mklv 创建jfs2类型文件系统 指定lv s ...
- 洛谷P3952 时间复杂度【字符串】【模拟】
题目描述 小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序, 于是你的机会来啦!下面请你编写程序 ...
- Netty入门教程——认识Netty
什么是Netty? Netty 是一个利用 Java 的高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的 API 的客户端/服务器框架. Netty 是一个广泛使用的 Java 网络编程框架(N ...
- shell之使用paste命令按列拼接多个文件
试验文件: [root@db03 shell-script]# cat text1.txt 1 2 3 4 5 [root@db03 shell-script]# cat text2.txt orac ...
- OC,nil,NULL,Nil,kCFNull
YYModel源码中有一句:kCFNull //解析model属性并附值 + (instancetype)yy_modelWithDictionary:(NSDictionary *)dictiona ...
- OPTIMIZE TABLE linked list 表优化原理 链表数据结构 空间再利用
小结: 1.加快读写: 2.对于InnoDB表,在一定条件下,通过复制旧表重建: 3.实践中, 3.1.show processlist;查看线程,发现,认为堵塞读请求: 3.2.数据长度空间不变,索 ...
- Copycat - MemberShip
https://github.com/atomix/copycat http://atomix.io/copycat/docs/membership/ 为了便于实现,Copycat把membe ...
- Android抓包方法 之Fiddler代理
1.抓包原理 Fiddler是类似代理服务器的形式工作,它能够记录所有你的电脑和互联网之间的http(S)通讯,可以查看.修改所有的“进出”的数据.使用代理地址:127.0.0.1, 默认端口:888 ...
- html 标签笔记
<一.HTML 基础结构> <html>________________________________<head><title>无标题文档</t ...