LeetCode题解——Generate Parentheses
2015-07-14 19:49
405 查看
Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
For example, given n = 3, a solution set is:
做了一些题目之后,发现使用递归的地方和使用回溯的地方也可以使用动态规划来求解,而且动态规划求解更加易于理解和实现,算法的效率更高。
DP
=”(“+DP[k]+”)“+DP[n-k-1]; //for k=0:n-1
DP[0]=""
For example, given n = 3, a solution set is:
"((()))", "(()())", "(())()", "()(())", "()()()"
做了一些题目之后,发现使用递归的地方和使用回溯的地方也可以使用动态规划来求解,而且动态规划求解更加易于理解和实现,算法的效率更高。
DP
=”(“+DP[k]+”)“+DP[n-k-1]; //for k=0:n-1
DP[0]=""
<pre name="code" class="cpp">//递归方法 class Solution { public: vector<string> generateParenthesis(int n) { vector<string> ans; if(n==0){ string s=""; ans.push_back(s); return ans; } vector<string> s1; vector<string> s2; for(int i=0; i<=n-1; i++) { s1=generateParenthesis(i); s2=generateParenthesis(n-i-1); for(auto k1:s1) for(auto k2:s2) { ans.push_back("("+k1+")"+k2); } } return ans; } };12ms
//DP动态规划求解 class Solution { public: vector<string> generateParenthesis(int n) { vector<vector<string>> DP(n+1,vector<string>()); DP[0].push_back(""); for(int i=1; i<=n; i++) { for(int k=0; k<i; k++) { for(auto k1:DP[k]) for(auto k2:DP[i-k-1]) { DP[i].push_back("("+k1+")"+k2); } } } return DP ; } };//4ms
相关文章推荐
- 大楼扔鸡蛋问题(动态规划)
- 【Spark】SparkContext源码解读
- 【Spark】Spark的Shuffle机制
- [转载] 最全最强解析:支付宝系统架构内部剖析(架构图)
- C8_指针
- Class文件结构
- VB编程概述
- 大数开根号(蓝桥杯-矩阵翻硬币)
- 架构师速成6.5-也谈设计模式
- iOS为什么Block的属性声明要用copy
- 【Spark】Spark容错机制
- 架构师速成6.5-也谈设计模式 分类: 架构师速成 2015-07-14 19:48 284人阅读 评论(0) 收藏
- 【leetcode】二叉树的LCA问题:Lowest Common Ancestor of a Binary Tree
- 机房收费系统之初体验
- POJ1144
- 【Spark】RDD机制实现模型
- 2010多校第一题 hdu3440House Man 差分约束系统
- dp cf B. Maximum Submatrix 2
- hdu 2544 最短路
- 三类,23种设计模式,速记理解法!PHP