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 引用类型的字符串

相关推荐
念何架构之路39 分钟前
Go reflect 包:结构体反射 —Field、Tag 与 VisibleFields
java·数据库·golang
liangbo71 小时前
03-JDK 10/11 局部变量推断与 LTS:var 到底该怎么用
java
2401_885885042 小时前
国际语音C#接口怎么写?.NET环境下实现国际语音验证码批量下发
开发语言·c#·.net
Percep_gan2 小时前
调用天翼云的对象存储ZOS,很详细
java·1024程序员节
若亦_2 小时前
数据结构>>优先级队列(堆)
java·数据结构
程序猿乐锅2 小时前
【从0-1学习Python | 第七篇】Python 面向对象基础
开发语言·笔记·后端·python·学习·1024程序员节
Wang's Blog2 小时前
Java 项目实战: 交友项目 - 查询圈子个人动态:查询我的动态需求分析
java·开发语言·交友
denlaku2 小时前
JDK 23 新特性详解
java
凯瑟琳.奥古斯特2 小时前
力扣1016高效解法:剪枝优化技巧
开发语言·c++·算法·leetcode·职场和发展
code2cat2 小时前
Java高级篇之Hibernate:让对象映射到表,理解持久化与事务
java·后端·hibernate·1024程序员节