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;
    }
};
相关推荐
LuckyRich11 分钟前
【高阶数据结构】跳表
开发语言·数据结构·c++
(lemon seed)2 分钟前
数据结构:树与二叉树(2)
数据结构·算法
ya888g3 分钟前
数据结构-图-存储-邻接矩阵-邻接表
数据结构·图论·邻接表·邻接矩阵
桃酥40335 分钟前
贪心算法day31|56. 合并区间、738. 单调递增的数字(整数与字符串的转换)、贪心刷题总结
c++·算法·leetcode·贪心算法·字符串
van叶~36 分钟前
移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——12.二叉树(习题)
开发语言·c++·算法
爱吃喵的鲤鱼38 分钟前
C++——深部解析哈希
c++·算法·哈希算法
LuckyRich11 小时前
【贪心算法】贪心算法
算法·贪心算法
喉咙痛的恐龙1 小时前
浅谈C++入门(1)
c++
MogulNemenis1 小时前
力扣100题——二维动态规划
算法·leetcode·动态规划
kingandlog1 小时前
Redis底层数据结构(详细篇)
数据结构·redis