算法篇之寻找合法字符串

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_43679333/article/details/89392517

题目描述:
给出一个正整数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;
}

小白笔记,欢迎大家指点

猜你喜欢

转载自blog.csdn.net/qq_43679333/article/details/89392517