打印给定数目括号的组合
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; }
相关文章推荐
- 给定一个数组,n个数,打印所有可能的r位数的组合。例如{1,2,3,4}n=4,r=2.输出{1,2}{1,3}{1,4}{2,3}{2,4}{3,4}
- 给定n对括号,编写一个函数来生成正确括号的所有组合。
- 打印出所有可能的括号组合
- 【算法】打印N对合理括号组合
- 打印出指定数目的{}的所有组合
- 打印n对括号的全部有效组合(即左右括号正确配对)
- 打印括号的合法组合
- 给定括号对数求匹配的数目
- 打印n对括号的全部有效组合(即左右括号正确配对)
- 实现一种算法,打印n对括号的全部有效组合(即左右括号正确配对)
- 打印n对括号的全部有效组合
- 面试编程题拾遗(06) --- 打印n对括号的全部有效组合
- 程序员面试金典: 9.9 递归和动态规划 9.6打印n对括号的全部有效组合
- 9.9递归和动态规划(六)——打印n对括号的所有有效组合(即左右括号正确配对)
- 9.9递归和动态规划(六)——打印n对括号的全部有效组合(即左右括号正确配对)
- 打印N对括号的全部有效组合
- 打印n对括号的全部n对有效组合
- 打印n对括号的全部有效组合
- 给定n对括号,编写一个函数来生成正确括号的所有组合。
- 打印n对括号匹配的所有组合