博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
并没有看起来那么简单leetcode Generate Parentheses
阅读量:5813 次
发布时间:2019-06-18

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

 它给出了这个问题的探讨。

超时的代码:

这个当n等于7时,已经要很长时间出结果了。这个算法的复杂度是O(n^2)。

#include
#include
#include
#include
using namespace std;bool isValid(string s) { map
smap; smap.insert(make_pair('(', ')')); stack
ss; int i = 0; int L = s.length(); while (i
F(int n, string s, vector
&result, vector
a){ if (n < 1) { return result; } if (n == 1) { for (int i = 0; i < a.size(); i++) { string t = s; t += a[i]; if (isValid(t)) result.push_back(t); } } else { for (int i = 0; i < a.size(); i++) { string t = s; t += a[i]; F(n - 1, t, result, a); } } return result;}vector
generateParenthesis(int n) { vector
a = { '(',')'}; vector
result; string s = ""; return F(n*2, s, result, a);}int main(){ vector
result = generateParenthesis(7); for (int i = 0; i < result.size(); i++) { cout << result[i].c_str() << endl; } return 0;}

 上面的解法显然代价是O(2^n)这个肯定超时。不知道自己当时写的时候就没有分析一下,加上今天写hiho coder上的那一题,由此可见对内存的开销和时间的代价还是不够敏感!

这个题分析一下还是简单的,首先就两中符号,不是这个就是另一个,所以只要满足当前左括号的数目大于右括号就可以加在字符串后添加右括号,如果左括号没有放完就是左括号的数目还没有到n,那么就可以继续放左括号。但是但是但是但是但是……哎,我竟然又犯了一个错误。

递归是递归,循环是循环不要混。 递归时一定要保证一次循环加一个。

我刚开始想的是当左括号大于右括号是可以这样写

if (left > right){

unguarded_generate(n, left + 1, right, result, s + ')');
unguarded_generate(n, left, right + 1, result, s + ')');
}

too young too simple啊!

AC代码:

1 #include
2 #include
3 4 using namespace std; 5 6 void unguarded_generate(int n, int left, int right, vector
&result, string s){ 7 if (left == n&&right == n){ 8 result.push_back(s); 9 }10 else{11 if (left != n){12 unguarded_generate(n, left + 1, right, result, s + '(');13 }14 if (left > right&&right != n){15 unguarded_generate(n, left, right + 1,result, s + ')');16 }17 }18 }19 20 vector
generateParenthesis(int n)21 {22 vector
ret;23 unguarded_generate(n, 0, 0, ret, "");24 return ret;25 }26 27 28 int main(){29 vector
result = generateParenthesis(3);30 for (int i = 0; i < result.size(); i++){31 cout << result[i].c_str() << endl;32 }33 }

 

转载于:https://www.cnblogs.com/chaiwentao/p/4428062.html

你可能感兴趣的文章
JavaScript基础教程1-20160612
查看>>
使用第三方类、库需要注意的正则类RegexKitLite的使用
查看>>
iOS \U7ea2 乱码 转换
查看>>
FCN图像分割
查看>>
ios xmpp demo
查看>>
python matplotlib 中文显示参数设置
查看>>
数据库事务隔离级别
查看>>
os模块大全详情
查看>>
【ros】Create a ROS package:package dependencies报错
查看>>
从内积的观点来看线性方程组
查看>>
kali linux 更新问题
查看>>
HDU1576 A/B【扩展欧几里得算法】
查看>>
廖雪峰javascript教程学习记录
查看>>
WebApi系列~目录
查看>>
Java访问文件夹中文件的递归遍历代码Demo
查看>>
项目笔记:测试类的编写
查看>>
通过容器编排和服务网格来改进Java微服务的可测性
查看>>
re:Invent解读:没想到你是这样的AWS
查看>>
PyTips 0x02 - Python 中的函数式编程
查看>>
阿里云安全肖力:安全基础建设是企业数字化转型的基石 ...
查看>>