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;
    }
};
相关推荐
自信的小螺丝钉4 分钟前
Leetcode 138. 随机链表的复制 哈希 / 拼接+拆分
leetcode·链表·哈希算法
元亓亓亓6 分钟前
LeetCode热题--207. 课程表--中等
算法·leetcode·职场和发展
坚持编程的菜鸟7 分钟前
LeetCode每日一题——有效的字母异位词
c语言·算法·leetcode
未知陨落7 分钟前
LeetCode:70.最小栈
数据结构·算法·leetcode
jikiecui23 分钟前
信奥崔老师:常用编译命令g++的基本使用
算法
乌萨奇也要立志学C++1 小时前
【洛谷】二叉树专题全解析:概念、存储、遍历与经典真题实战
数据结构·c++·算法
小谢在学习1 小时前
旋转图像
算法
北京地铁1号线2 小时前
机器学习笔试选择题:题组2
人工智能·算法·机器学习
heeheeai3 小时前
决策树,随机森林,boost森林算法
算法·决策树·随机森林·kotlin·boost
(●—●)橘子……4 小时前
记力扣2271.毯子覆盖的最多白色砖块数 练习理解
数据结构·笔记·python·学习·算法·leetcode