求n对括号的排列组合(卡特兰数)

求n对括号的排列组合(卡特兰数)
关键:从起始位置至右的任意序列,左括号的数目>=右括号的数目

void generateParenthesis(int n )
{
       generate( nn"" );
}

void generate(int leftNum , int rightNum , string s )
{
       //递归出口
       if ( leftNum == 0 && rightNum == 0)
       {
              cout << s << endl;
       }
       //只要左括号还有,就可以打印
       if ( leftNum > 0)
       {
              generate( leftNum - 1, rightNum, s + '(');
       }
       //当剩余的左括号的数目小于剩余的右括号的树木的时候,即字符串中
左括号的数目>=右括号的数目,就可以打印右括号
       if ( rightNum > 0 && leftNum < rightNum)
       {
              generate( leftNum, rightNum - 1, s + ')');
       }
}










原文地址:https://www.cnblogs.com/ZhangJinkun/p/4531395.html