版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
题目描述:
给出一个正整数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;
}
小白笔记,欢迎大家指点