算法篇之尋找合法字符串

題目描述:
給出一個正整數n,請給出所有的包含n個’(‘和n個’)‘的字符串,使得’(‘和’)‘可以完全匹配。
例如:
‘(())()’,’()()()’ 都是合法的;
'())()('是不合法的。
請按照__字典序__給出所有合法的字符串。

在這裏插入圖片描述

解題思路

建立一個n層滿二叉樹,遍歷每一條路徑(DFS),淘汰不合法路徑。

圖解如下(設n = 4)其中紅色的爲合法路徑之一 大家懂我意思就好 不要在意圖好不好看
在這裏插入圖片描述

話不多少,上代碼

感謝偶同學提供的代碼:https://www.nowcoder.com/profile/5540195/codeBookDetail?submissionId=31932363

#include<bits/stdc++.h>
using namespace std;
void jianli(int left,int right,string str,vector<string>& result)
{
    if(right<left)
        return;
    if(right==0&&left==0)
        result.push_back(str);
    if(left>0)
        jianli(left-1,right,str+'(',result);
    if(right>0)
        jianli(left,right-1,str+')',result);
}
int main()
{
    int n;
    while(cin>>n)
    {
        string str;
        vector<string>result;
        jianli(n,n,str,result);
        for(int i=0;i<result.size()-1;i++)
            cout<<result[i]<<",";
        cout<<result[result.size()-1]<<endl;
    }
    return 0;
}

小白筆記,歡迎大家指點

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章