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;
    }
};
相关推荐
闻缺陷则喜何志丹2 分钟前
【栈 递归】P8650 [蓝桥杯 2017 省 A] 正则问题|普及+
c++·数学·蓝桥杯·递归·
苏宸啊7 分钟前
vecto底层模拟实现
c++
80530单词突击赢10 分钟前
STLVector底层原理与高效运用
数据结构·算法
一切尽在,你来11 分钟前
C++多线程教程-1.2.2 C++标准库并发组件的设计理念
开发语言·c++
haluhalu.13 分钟前
LeetCode---基础算法刷题指南
数据结构·算法·leetcode
iAkuya19 分钟前
(leetcode)力扣100 58组合总和(回溯)
算法·leetcode·职场和发展
80530单词突击赢20 分钟前
C++关联容器深度解析:set/map全攻略
java·数据结构·算法
m0_5613596721 分钟前
代码热更新技术
开发语言·c++·算法
兩尛27 分钟前
c++知识点1
java·开发语言·c++
冉佳驹35 分钟前
C++11 ——— 列表初始化、移动语义、可变参数模板、lamdba表达式、function包装器和bind包装器
c++·可变参数模板·移动构造·移动赋值·function包装器·bind包装器·lamdba表达式