首页 > 其他分享 >力扣 leetcode 22. 括号生成

力扣 leetcode 22. 括号生成

时间:2022-12-11 19:47:10浏览次数:32  
标签:22 idx int res 力扣 括号 添加 leftBracket leetcode

问题描述

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

提示:

  • 1 <= n <= 8

示例

示例 1:

输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]

示例 2:

输入:n = 1
输出:["()"]

解题思路

这里涉及括号组合总数的问题,本质上也是一种排列组合问题,可以用递归的方式来解决。我们先来分析一下问题,题目给出 n 表示括号的对数,实际上可以看成是左(右)括号的数量,我们有几个左括号,才能添加几个右括号,否则是非法的。

那么,我们可以保存左括号的个数,以及合法的右括号个数,然后先添加左括号,再添加右括号,当左右括号的数量都为 n 之后,就将结果保存。

class Solution {
public:

    void pushItem(int n, vector<string>& res, string& r, int idx, int rightBracket, int leftBracket){
        if(idx == r.size()){ // 判断是否生成完成
            res.emplace_back(r);
            return;
        }
        if(leftBracket < n){ // 判断左括号数量是否达到上限
            r[idx] = '('; // 添加左括号
            pushItem(n, res, r, idx + 1, rightBracket + 1, leftBracket + 1);
        }
        if(rightBracket){ // 判断是否能添加右括号
            r[idx] = ')'; // 添加右括号
            pushItem(n, res, r, idx + 1, rightBracket - 1, leftBracket);
        }
    }

    vector<string> generateParenthesis(int n) {
        string r(n * 2, 'a');
        vector<string> res;
        pushItem(n, res, r, 0, 0, 0);
        return res;
    }
};

标签:22,idx,int,res,力扣,括号,添加,leftBracket,leetcode
From: https://www.cnblogs.com/greatestchen/p/16974253.html

相关文章

  • 2022-2023-1 20221406 《计算机基础与程序设计》第十五周学习总结
    2022-2023-120221406《计算机基础与程序设计》第十四周学习总结作业信息这个作业属于哪个课程<班级的链接>https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP......
  • 力扣 leetcode 213. 打家劫舍 II
    问题描述你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋......
  • 20201223郑晶之电子公文传输系统——个人贡献
    一、个人工作简述1.实验前期选择开发工具,并完成需求分析;Faker团队作业(四):描述设计-小组博客123-博客园(cnblogs.com)2.修改完善需求规格说明书https://g......
  • QT图书管理系统(2022年可视化编程技术及应用)
    QT图书管理系统(2022年可视化编程技术及应用)2022年可视化编程技术及应用课程设计报告项目题目:******系统设计与开发指导教师:队员姓名及学号:队员姓名及......
  • 力扣 leetcode 62. 不同路径
    问题描述一个机器人位于一个mxn网格的左上角(起始点在下图中标记为“Start”)。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为......
  • 力扣---5. 最长回文子串
    给你一个字符串s,找到s中最长的回文子串。示例1:输入:s="babad"输出:"bab"解释:"aba"同样是符合题意的答案。示例2:输入:s="cbbd"输出:"bb"提示:   1<=s.length<=......
  • NOIP2022 题解
    A.种花枚举\((x_2,y_0)\),考虑\(x_1\)可能在哪些位置,显然是在\(x_2\)往上的一个极长连续0段上。考虑如果固定了\(x_1\)的位置后怎么计算C形的数量,我们预处理......
  • NOIP 2022 游记
    心态基本完全放平了,感觉这段经历还是比较有纪念意义的,还是总结一下这一段发生的事情吧。首先是备考noip,刷了大量的模拟赛,坚持每周打+VPatcoder并补题,以及参加了qbxt......
  • 2022,SpectNet : End-to-End Audio Signal Classification Using Learnable Spectrogr
    DOI:10.48550/arXiv.2211.09352papercode......
  • 2022-2023-1 20221311《计算机基础与程序设计》课程总结
    2022-2023-120221311《计算机基础与程序设计》课程总结作业信息班级:https//edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求:https.//www.cnblogs.com/rocedu/p/......