Redian新闻
>
有人能解释下Generate Parentheses的DP解法么?
avatar
a*e
2
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:
"((()))", "(()())", "(())()", "()(())", "()()()"
Recursive 的写出来了,但DP的不知道怎么做,看了别人的code也不太懂,尤其是
for(int l=0;lbuff[i].push_back(buff[j][k]+"("+buff[i-j-1][l]+")");
在做啥,为啥idx要i-j-1 等完全不清楚。
另外,大家有推荐学习DP的方法么?多谢
class Solution {
public:
vector generateParenthesis(int n) {
vector res;
string r;
stack st;
dfs(res,r,0,0,n);
return res;
}

void dfs(vector &res, string r, int leftCount, int rightCount,
int n)
{
if (leftCount==n&&rightCount==n)
{
res.push_back(r);
return;
}
else
{
if (leftCount{
dfs(res,r+"(",leftCount+1,rightCount,n);
}

if (rightCount{
dfs(res,r+")",leftCount,rightCount+1,n);
}
}

}
};
class Solution {
public:
vector generateParenthesis(int n) {
vector result;
if(n<1)
return result;
vector > buff(n+1,vector());
buff[0]=vector(1,"");
for(int i=1;i<=n;i++)
{
for(int j=0;j{
for(int k=0;kfor(int l=0;lbuff[i].push_back(buff[j][k]+"("+buff[i-j-1][l]+")");
}
}
return buff[n];
}
};
avatar
w*a
3
是DP求结果的数量么?
如果只是求数量,那就跟unqiue BST那题一样,都是卡塔兰数。
avatar
r*7
4
这个根本不用dp,就用greedy就行了

combinations

【在 a***e 的大作中提到】
: 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:
: "((()))", "(()())", "(())()", "()(())", "()()()"
: Recursive 的写出来了,但DP的不知道怎么做,看了别人的code也不太懂,尤其是
: for(int l=0;l: buff[i].push_back(buff[j][k]+"("+buff[i-j-1][l]+")");
: 在做啥,为啥idx要i-j-1 等完全不清楚。
: 另外,大家有推荐学习DP的方法么?多谢
: class Solution {

avatar
x*a
5
能贴一下dp的完整代码么?
avatar
C*e
6
你贴的这个解法不是DP
而且我不认为此题可以用DP做。。。

combinations

【在 a***e 的大作中提到】
: 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:
: "((()))", "(()())", "(())()", "()(())", "()()()"
: Recursive 的写出来了,但DP的不知道怎么做,看了别人的code也不太懂,尤其是
: for(int l=0;l: buff[i].push_back(buff[j][k]+"("+buff[i-j-1][l]+")");
: 在做啥,为啥idx要i-j-1 等完全不清楚。
: 另外,大家有推荐学习DP的方法么?多谢
: class Solution {

avatar
r*3
7
可以dp的, 不过LZ代码没给全吧
就是i对括号的可以这样考虑, 最左边的做括号对应的右括号有i种情况, 对于每一种情
况, 这对括号里面的j对括号已经在之前被计算过, 因为ji-j-1对括号也已经在之前被计算过, 因为i-j-1递推式
buff[i]中的元素 = '(' + buff[j]中的任意一个 + ')' + buff[i-j-1]中的任意一个
, 枚举j就行了, 0 <= j <= i-1
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。