侧边栏壁纸
  • 累计撰写 192 篇文章
  • 累计创建 2 个标签
  • 累计收到 87 条评论

【题解】【上海】【匹配括号(三)】

Allen Best
2023-08-07 / 0 评论 / 0 点赞 / 53 阅读 / 414 字
温馨提示:
本文最后更新于 2023-08-07,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
#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;
}    
0

评论区