当前位置: 首页 > news >正文

【算法day19】括号生成——数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

括号生成

https://leetcode.cn/problems/generate-parentheses/description/

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

左括号数必须大于右括号数,且小于等于n
在这里插入图片描述

class Solution {
public:
    vector<string> ans;

    void generator(string ch, int n, int cur_l, int cul_r) {
        if (cur_l < cul_r) {
            return;
        }
        if (cur_l == n && cul_r == n) {
            // 结束条件是出现了三次(或者")"
            ans.push_back(ch);
            return;
        }
        if (cur_l <= n-1) {
            generator(ch + "(", n, cur_l + 1, cul_r);
        }
        if (cul_r <= n-1) {
            generator(ch + ")", n, cur_l, cul_r + 1);
        }
        
        return;
    }
    vector<string> generateParenthesis(int n) {
        generator("(", n, 1, 0);
        return ans;
    }
};

笨办法,迭代所有的节点,然后判断是否符合,
在这里插入图片描述

在这里插入图片描述

class Solution {
public:
    vector<string> ans;

    bool isValid(string ch) {
        stack<char> s;
        for (auto c : ch) {
            if (c == '(') {
                s.push(c);
            } else {
                if (!s.empty()) {
                    s.pop();
                } else {
                    return false;
                }
            }
        }
        if(s.empty()){
            return true;
        }
        return false;
    }
    void generator(string ch, int n, int cur) {
        if (cur == n*2) {
            // 结束条件是出现了三次(或者")"
            if (isValid(ch))
            {
                ans.push_back(ch);
            }
            return;
        }
        generator(ch+"(",n,cur+1);
        generator(ch+")",n,cur+1);
        return;
    }
    vector<string> generateParenthesis(int n) {
        generator("",n,0);
        return ans;
    }
};
http://www.dtcms.com/a/85536.html

相关文章:

  • MySQL中怎么分析性能?
  • ollama 设置环境变量OLLAMA_HOST允许外部访问
  • 深入探索ArkUI中的@LocalBuilder装饰器:构建高效可维护的UI组件
  • 【图像处理基石】ISP中的TNR算法详解:原理、实现与优化
  • 【经验总结】AUTOSAR架构下NvMBlock无效问题分析
  • 替代-UX设计师
  • 第四章·字符串列表元组字典集合
  • 数据结构与算法-数据结构-树状数组
  • NetSuite Saved Search隐藏功能 之 行间比较
  • Go红队开发—CLI框架(一)
  • 使用逆滤波法、维纳滤波法、约束最小二乘法、Lucy - Richardson算法恢复运动降质图像的Matlab代码
  • 数据结构-----树
  • OSPF多区域通信
  • 如何在Linux CentOS上安装和配置Redis
  • C++模板编程与元编程面试题及参考答案(精选100道题)
  • Linux线程安全
  • 在vitepress中使用vue组建,然后引入到markdown
  • JAVASCRIPT 基础 DOM元素,MAP方法,获取输入值
  • 【AcWing】算法基础课-数学知识
  • 快速排序总结
  • Excel 豆知识 - 如何打开Online Web版 Excel/Word
  • 视频结构化框架VideoPipe-OpenCV::DNN-TensorRT安装教程【Nvidia各系列显卡-亲测有效】
  • 【数据结构】单链表
  • 【xiaozhi赎回之路-2:语音可以自己配置就是用GPT本地API】
  • 组件日志——etcd
  • 计算机操作系统(四) 操作系统的结构与系统调用
  • 【动态规划】不同路径
  • Js闭包Closure 及 其可能产生的内存泄漏问题
  • 详解 printf 打印的所有内容
  • C之(15)cppcheck使用介绍