博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode 22括号生成
阅读量:7236 次
发布时间:2019-06-29

本文共 1287 字,大约阅读时间需要 4 分钟。

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

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

 

转载于:https://www.cnblogs.com/legendcong/p/9451841.html

你可能感兴趣的文章
记录linux下通过对limits的设置来优化系统性能
查看>>
Linux下安装无线网卡
查看>>
apache的commons-fileupload中FileItem类和ServletFileUpload
查看>>
列表嵌套元祖排序
查看>>
jquery自动切换tabs选项卡的具体实现
查看>>
使用MDaemon作垃圾邮件过滤网关攻略
查看>>
python脚本判断一个数是否为素数的几种方法
查看>>
Java学习笔记(39)——Java集合11之Stack
查看>>
office 2010打开word文件提示以安全模式打开
查看>>
Microsoft virtual WiFi Miniport Adapter
查看>>
linux /dev/null 对ssh登录的影响
查看>>
连上***后 自己的电脑用公司网络
查看>>
Windows7部署Android开发环境实战图
查看>>
IBM-P55A 内存故障处理
查看>>
JVM工作原理和特点
查看>>
hosts文件生效
查看>>
Decrypt file with GPG and Download m3u8 file
查看>>
产品经理的职业发展路线是什么
查看>>
形参长度可变的方法
查看>>
scp: command not found找不到scp命令
查看>>