void paranthesis(int left, int right, vector<char> &vt) {
if (left == 0 && right == 0) {
for (int i = 0 ;i < vt.size() ; ++i)
cout << vt[i];
cout<<endl;
return;
}
if (left < right && right >= 1) {
vt.push_back(')');
paranthesis(left,right - 1, vt);
vt.pop_back();
}
if (left >= 1) {
vt.push_back('(');
paranthesis(left - 1, right, vt);
vt.pop_back();
}
}
void nonRecursiveParanthesis(int n){//dp
vector<vector<vector<string> > > vt(n + 1);
for (int i = 0; i < n + 1; ++i)
vt[i].resize(n + 1);
vt[n][n].push_back("");
for (int i = n -1 ; i >=0; --i) {
for (int j = n; j >=0; --j) {
if (i <j+1 && j+1 <= n) {
vector<string> &tmp = vt[i][j+1];
for (int ind = 0; ind < tmp.size(); ++ind)
vt[i][j].push_back(tmp[ind] +")");
}
vector<string> &tmp = vt[i+1][j];
for (int ind = 0; ind <tmp.size(); ++ind)
vt[i][j].push_back(tmp[ind] + "(");
}
}
vector<string> &tmp = vt[0][0];
for (int i = 0; i < tmp.size(); ++i)
cout<<tmp[i]<<endl;
}
int main()
{
vector<char> vt;
//paranthesis(3,3,vt);
nonRecursiveParanthesis(3);
return 0;
}
打印给定数目括号的组合
最新推荐文章于 2021-12-16 14:48:38 发布