Leetcode22 —— 括号生成

目录

题目:

题解:

C++代码:

代码细节:

题目:

题解:

  • 核心方法:回溯 + 剪枝,通过深度优先遍历构建括号字符串,同时用规则过滤无效路径;

  • 路径与约束

    • 路径:用 current 记录当前构建的括号串;

    • 剪枝规则:左括号数不超 n,右括号数不超左括号数(保证有效前缀);

  • 递归逻辑

    • 终止条件:字符串长度为 2n,将其加入结果集;

    • 递归选择:先尝试加左括号(满足约束时),递归探索后撤销选择;再尝试加右括号(满足约束时),递归探索后撤销选择;

  • 主函数:初始化结果集和临时字符串,启动回溯,最终返回所有有效组合。

C++代码:

复制代码
class Solution {

    void backtrack(vector<string>& result , string& c , int open, int close ,int n){
        if(c.size() == 2*n){
            result.push_back(c);
            return;
        }
        // 左括号未使用完
        if(open < n){
            c.push_back('(');
            backtrack(result, c, open+1,close,n);
            c.pop_back();
        }
        // 满足右括号小于左括号
        if(close < open ){
            c.push_back(')');
            backtrack(result, c, open,close+1,n);
            c.pop_back();
        }

    }
public:
    vector<string> generateParenthesis(int n) {
        //调用我们定义的函数
        vector<string> result;
        string cur;
        backtrack(result,cur,0,0,n);
        return result;
    }
};

代码细节:

这里的 ans和cur需要用引用类型才能被实际修改

vector<string>& ans 引用类型的字符串数组,存储所有有效括号字符串 string& cur 引用类型的字符串

相关推荐
mldong5 小时前
引擎从不发一条消息:jeeflow 的两类扩展点与消息模块的分工
java·架构
君顾15 小时前
智慧零售实战指南:从技术架构到落地方案全解析
java·开发语言·零售
南棱笑笑生5 小时前
20260904实测给飞凌OK3576-C开发板刷入Rockchip原厂的IMG固件【使用飞凌的DTS】切换串口波特率为1.5Mbps
c语言·开发语言·rockchip
zhanghe6876 小时前
es的密码带有特殊字符,导出
java
平头哥技术团队6 小时前
Day 10 | 工欲善其事:VS Code 配置与项目归档
android·开发语言·前端·javascript·html·交互
pnoker6 小时前
IoT DC3 概念解读:把设备抽象成一套语义模板——位号、指令、事件与面向智能体的设备建模
java·人工智能·物联网·iot·dc3
乌萨奇也要立志学C++6 小时前
【洛谷】kmp算法
开发语言·算法
my_realmy6 小时前
Java SE 基础学习笔记(一):面向对象、继承多态、抽象接口与异常(JDK 8)
java·多线程·并发··生产者消费者模式
传奇开心果编程6 小时前
【Rust入门知识点学与练】第4课:条件判断 if / else
开发语言·学习·rust
m0_380743877 小时前
给 Claude API 调用补上超时重试和错误分类
开发语言·人工智能·php