N对括号可以有多少种匹配排列方式
来源:互联网 发布:网络预警信息包括 编辑:程序博客网 时间:2024/05/03 08:12
/*copyright@nciaebupt 转载请注明出处题目:N对括号可以有多少种匹配排列方式?比如两对括号可以有两种:()()和(())主要思想是递归卡特兰数:通项公式 h(n)=c(n,2n)-c(n-1,2n) h(n)= h(0)*h(n-1) + h(1)*h(n-2) + ... + h(n-1)h(0) (其中n>=2)*/#include <cstdlib>#include <iostream>#include <vector>#include <string>std::vector<std::string> nBrackets(int n){ std::vector<std::string> vec1; if(n == 1){ vec1.push_back("()"); return vec1; } std::vector<std::string> vec = nBrackets(n-1); for(int i = 0; i < vec.size(); ++i){ vec1.push_back("("+vec[i]+")"); vec1.push_back("()" + vec[i]); if("()"+vec[i] != vec[i]+"()"){ vec1.push_back(vec[i]+"()"); } } return vec1;}int main(int argc, char ** argv){ int n = 4; std::vector<std::string> vec; vec = nBrackets(n); std::cout<<vec.size()<<std::endl; for(int i = 0; i < vec.size();++i){ std::cout<<vec[i]<<std::endl; } system("pause"); return 0;}