一个简单的递归生成,但注意要做MEMENTO:
class Solution {
public:
vector<string> generateParenthesis(int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
rec=vector<vector<string> >(n+1);
vector<string> ret=generate(n);
return ret;
}
vector<vector<string> > rec;
vector<string> generate(int n)
{
if (!rec[n].empty()) return rec[n];
vector<string> ret;
if ( n==0)
{ ret.push_back(string(""));
return ret;
}
if ( n==1)
{
ret.push_back(string("()"));
return ret;
}
vector<string> in;
vector<string> out;
int i,j,k;
string tmp;
for( k=n-1;k>=0;k--)
{
in=generate(k);
out=generate(n-1-k);
for(i=0;i<in.size();i++)
{
for(j=0;j<out.size();j++)
{
tmp.clear();
tmp.append(string("("));
tmp.append(in[i]);
tmp.append(string(")"));
tmp.append(out[j]);
ret.push_back(tmp);
}
}
}
rec[n]=ret;
return ret;
}
};