22 括号生成

题目

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

示例 1:

输入:n = 3

输出:["((()))","(()())","(())()","()(())","()()()"]

示例 2:

输入:n = 1

输出:["()"]

思路

使用dfs,回溯+剪枝的方法。

一共是2n个位置,从第一个格子开始检查是否有合适的括号,如果有继续检查下一个格子是否有合适的,否则返回上一层继续检查。检查过程中可以添加限定条件:left<n和right<left缩小范围

代码

bash 复制代码
class Solution {
public:
    vector<string> generateParenthesis(int n) {
        vector<string> res;
        string temp;
        int left = 0, right = 0;
        dfs(n, left, right, temp, res);
        return res;
    }
    void dfs(int n, int left, int right, string temp, vector<string>& res) {
        if (left == n && right == n) {
            res.push_back(temp);
            return;
        }
        if (left < n) {
            temp.push_back('(');
            dfs(n, left + 1, right, temp, res);
            temp.pop_back();
        }
        if (right < left) {
            temp.push_back(')');
            dfs(n, left, right + 1, temp, res);
            temp.pop_back();
        }
    }
};

感谢 华南溜达虎 力扣hot100

相关推荐
Dlrb121111 小时前
C语言-指针三
c语言·算法·指针·const·命令行参数
Tisfy11 小时前
LeetCode 2540.最小公共值:双指针(O(m+n))
算法·leetcode·题解·双指针
IronMurphy11 小时前
【算法四十七】152. 乘积最大子数组
算法
淘矿人12 小时前
Claude辅助DevOps实践
java·大数据·运维·人工智能·算法·bug·devops
Cosolar12 小时前
万字详解:RAG 向量索引算法与向量数据库架构及实战
数据库·人工智能·算法·数据库架构·milvus
落羽的落羽14 小时前
【算法札记】练习 | Week4
linux·服务器·数据结构·c++·人工智能·算法·动态规划
萑澈15 小时前
算法竞赛入门:C++ STL核心用法与时空复杂度速查手册
数据结构·c++·算法·stl
Godspeed Zhao15 小时前
从零开始学AI16——SVM
算法·机器学习·支持向量机
江屿风15 小时前
C++OJ题经验总结(竞赛)1
开发语言·c++·笔记·算法