#include<bits/stdc++.h>
using namespace std;
int n, cnt;
char c[110];
void dfs(int l, int r) {//前l+r个括号已经确定,有l个左括号,r个右括号,并且满足要求2,尝试枚举下一位字符,按照字典序顺序,先枚举左括号,再枚举又括号
if(cnt >= 1000)
return;
if(l == n && r == n) {
++cnt;
cout<<c<<endl;
return;
} else if(l == r) {
c[l + r] = '(';
dfs(l + 1, r);
} else if(l == n) {
c[l + r] = ')';
dfs(l, r + 1);
} else {
c[l + r] = '(';
dfs(l + 1, r);
c[l + r] = ')';
dfs(l, r + 1);
}
}
int main() {
cin>>n;
c[2 * n] = '\0';
dfs(0, 0);
return 0;
}
评论区