当前位置: 首页 > 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;
    }
};

相关文章:

  • 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】算法基础课-数学知识
  • 快速排序总结
  • 外媒称菲方允许菲官员窜台,国台办:应停止在台湾问题上玩火
  • 工行一季度净赚841亿元降3.99%,营收降3.22%
  • 西班牙葡萄牙突发全国大停电,欧洲近年来最严重停电事故何以酿成
  • 事关稳就业稳经济,10张海报看懂这场发布会的政策信号
  • 幸福航空取消“五一”前航班,财务人员透露“没钱飞了”
  • 利物浦提前四轮英超夺冠,顶级联赛冠军数追平曼联