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;
    }
};
相关推荐
spcier3 小时前
图论拓扑排序-Kahn 算法
算法·图论
知星小度S3 小时前
动态规划(一)——思想入门
算法·动态规划
ysa0510303 小时前
动态规划-逆向
c++·笔记·算法
燃于AC之乐3 小时前
我的算法修炼之路--7—— 手撕多重背包、贪心+差分,DFS,从数学建模到路径DP
c++·算法·数学建模·深度优先·动态规划(多重背包)·贪心 + 差分
闻缺陷则喜何志丹3 小时前
【BFS 动态规划】P12382 [蓝桥杯 2023 省 Python B] 树上选点|普及+
c++·蓝桥杯·动态规划·宽度优先·洛谷
chinesegf3 小时前
文本嵌入模型的比较(一)
人工智能·算法·机器学习
We་ct4 小时前
LeetCode 6. Z 字形变换:两种解法深度解析与优化
前端·算法·leetcode·typescript
REDcker4 小时前
Redis容灾策略与哈希槽算法详解
redis·算法·哈希算法
福楠5 小时前
C++ STL | map、multimap
c语言·开发语言·数据结构·c++·算法
Sarvartha5 小时前
二分查找学习笔记
数据结构·c++·算法