Leetcode 22. 括号生成 回溯 C++实现

Leetcode 22.括号生成

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

算法:

创建返回数组 ans ,和临时变量 path

当左括号数量open 小于应填括号数n 时,可以填左括号;当右括号数量 i-open 小于左括号数量 open 时,可以填右括号。递归。

代码:

cpp 复制代码
class Solution {
public:
    vector<string> generateParenthesis(int n) {
        vector<string> ans;
        int m = n*2;// 左括号和右括号一共个数
        string path(m,0);// 所有括号长度都是一样的 m
        // 目前已经填了的括号数 i
        // 左括号个数 open,右括号个数 i-open
        auto dfs = [&](auto &&dfs,int i,int open){
            if(i == m){
                ans.emplace_back(path);
                return ;
            }
            // 可以填左括号
            if(open < n){
                path[i] = '(';
                dfs(dfs,i + 1,open + 1);
            }
            // 可以填右括号
            if(i - open < open){
                path[i] = ')';
                dfs(dfs,i + 1,open);
            }
        };
        dfs(dfs,0,0);// 入口
        return ans;
    }
};
相关推荐
吴秋霖1 分钟前
profileData纯算逆向分析
算法·设备指纹·反爬虫技术
sprintzer2 分钟前
11.26-12.05力扣栈刷题
算法·leetcode·职场和发展
sin_hielo14 分钟前
leetcode 3578
数据结构·算法·leetcode
ShiMetaPi43 分钟前
SAM(通用图像分割基础模型)丨基于BM1684X模型部署指南
人工智能·算法·ai·开源·bm1684x·算力盒子
前端小白在前进1 小时前
力扣刷题:无重复字符的最长子串
算法·leetcode·职场和发展
小小的橙菜吖!1 小时前
联合体的学习
学习·算法
fish_xk1 小时前
c++基础扩展
开发语言·c++
阿沁QWQ1 小时前
C++继承
开发语言·c++
啊吧怪不啊吧1 小时前
C++之基于正倒排索引的Boost搜索引擎项目searcher部分代码及详解
c++·搜索引擎·项目
Xing_ke3091 小时前
3D点云分割与检测(后续更新)
算法·3d点云