LeetCode Hot 100 括号生成

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

示例 1:

复制代码
输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]

示例 2:

复制代码
输入:n = 1
输出:["()"]

提示:

  • 1 <= n <= 8

方法二:回溯法
思路和算法

方法一还有改进的余地:我们可以只在序列仍然保持有效时才添加 '(' 或 ')',而不是像 方法一 那样每次添加。我们可以通过跟踪到目前为止放置的左括号和右括号的数目来做到这一点,

如果左括号数量不大于 n,我们可以放一个左括号。如果右括号数量小于左括号的数量,我们可以放一个右括号。

cpp 复制代码
class Solution {
public:
    void back(vector<string>& ans,string& cur,int open,int close,int n)
    {
        if(cur.size() == n * 2)
        {
            ans.push_back(cur);
            return;
        }
        if(open < n)
        {
            cur.push_back('(');
            back(ans,cur,open + 1,close,n);
            cur.pop_back();
        }
        if(close < open)
        {
            cur.push_back(')');
            back(ans,cur,open ,close + 1,n);
            cur.pop_back();
        }
    }
    vector<string> generateParenthesis(int n) {
        vector<string> ans;
        string cur;
        back(ans,cur,0,0,n);
        return ans;
    }
};
相关推荐
晨曦夜月13 分钟前
map与unordered_map区别
算法·哈希算法
Morwit15 分钟前
QML组件之间的通信方案(暴露子组件)
c++·qt·职场和发展
图码38 分钟前
如何用多种方法判断字符串是否为回文?
开发语言·数据结构·c++·算法·阿里云·线性回归·数字雕刻
handler011 小时前
Linux 内核剖析:进程优先级、上下文切换与 O(1) 调度算法
linux·运维·c语言·开发语言·c++·笔记·算法
minglie11 小时前
实数列的常用递推模式
算法
代码小书生1 小时前
math,一个基础的 Python 库!
人工智能·python·算法
AI科技星1 小时前
全域数学·数术本源·高维代数卷(72分册)【乖乖数学】
人工智能·算法·数学建模·数据挖掘·量子计算
生成论实验室1 小时前
《事件关系阴阳博弈动力学:识势应势之道》第一篇:生成正在发生——从《即事经》到事件-关系网络
人工智能·科技·算法·架构·创业创新
漂流瓶jz1 小时前
UVA-1152 和为0的4个值 题解答案代码 算法竞赛入门经典第二版
数据结构·算法·二分查找·题解·aoapc·算法竞赛入门经典·uva
leoufung2 小时前
LeetCode 76:Minimum Window Substring 题解与滑动窗口思维详解
算法·leetcode·职场和发展