題目描述:
給出一個正整數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;
}
小白筆記,歡迎大家指點