【100題】第四十六題 括弧匹配

來源:互聯網
上載者:User

一,題目

       四對括弧可以有多少種匹配相片順序?比如兩對括弧可以有兩種:()()和(())

二,解答

        

        解法一:左右括弧成一對則抵消

                        可以將左括弧看成1右括弧看成
-1,然後對8個數進行全排列

                        對每個排列判斷,是否符合條件,逐個相加,sum>=0直到遍曆完該序列,符合條件則count++

                         如果出現sum<0則失敗

       解法二:採用八位bit,從0000
0000 到 1111 1111遍曆,遇到0加
-1遇到1加
1

                        如果加完該序列所有位等於0,且遞加過程中sum始終大於零則符合條件

三,源碼


  

#include<iostream>#include <vector>using namespace std ;void Print(vector<char> v){for (vector<char>::iterator beg=v.begin();beg!=v.end();++beg)cout<<*beg<<" ";cout<<endl;}void MatchNums(int nSize,int nLen,vector<char> &v){int nLeftBrackets=0;int nRightBrackets=0;for (vector<char>::iterator beg=v.begin();beg!=v.end();++beg){if(*beg=='(')nLeftBrackets++;elsenRightBrackets++;if(nRightBrackets>nLeftBrackets)return;if(nLeftBrackets+nRightBrackets==nSize&&nLeftBrackets==nRightBrackets)Print(v);}if (nLen>0){v.push_back('(');MatchNums(nSize,nLen-1,v);v.pop_back();v.push_back(')');MatchNums(nSize,nLen-1,v);v.pop_back();}}int main(){vector <char> v;int n=4;MatchNums(n,n,v);return 1;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.