您的位置:首页 > 其它

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]=""

<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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: