46 四对括号可以有多少种匹配排列方式

来源:互联网 发布:尘埃3优化 编辑:程序博客网 时间:2024/04/29 22:08
/*46.搜狐:四对括号可以有多少种匹配排列方式?比如两对括号可以有两种:()()和(())排列问题,注意当前右括号的数量不能超过左括号*/#include <iostream>  using namespace std;  //匹配数  int num=0;  //判断当前n对括号是否匹配  bool isMatch(int n,char* bracket)  {      int left_num=0,right_num=0;      for(int i=0;i<2*n;++i)      {          if(bracket[i]=='l')              left_num++;          else if(bracket[i]=='r')              right_num++;          if(left_num<right_num)              return false;      }      if(left_num==n && right_num==n)          return true;      else          return false;  }  //回溯法  void BracketMatch(int n,int i,char* bracket)  {      if(i==2*n)//递增i,到2n满足     {          if(isMatch(n,bracket))              num++;          return;      }      else      {          bracket[i]='l';          BracketMatch(n,i+1,bracket);          bracket[i]='r';          BracketMatch(n,i+1,bracket);      }  }  int main()  {      int n;      while(cin>>n){char* bracket=new char[2*n];num=0;    BracketMatch(n,0,bracket);      cout<<n<<"对括号最多有"<<num<<"种匹配方式!"<<endl;}     return 0; }

0 0
原创粉丝点击