您的位置:首页 > 其它

打印给定数目括号的组合

2012-11-30 09:47 190 查看
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

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