首页 > 其他分享 >LeetCode-22. 括号生成

LeetCode-22. 括号生成

时间:2024-01-02 11:35:28浏览次数:34  
标签:22 int res 括号 vector vec str LeetCode


LeetCode-22. 括号生成

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

示例 1:

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

示例 2:

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

提示:

  • 1 <= n <= 8

solution

动态规划

可以采用动态规划的思想,首先当n=1时,返回(),当n>1时,一定可以在n-1的基础上得到n的组合,即从第0项到第2*n-1项中插入()并放入vector中,但是要注意已经插入的不在重复插入

#include <vector>
#include <string>
#include <iostream>
#include <unordered_map>

using namespace std;

//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public:
    vector<string> generateParenthesis(int n) {
        vector<string> res, pre_vec, vec;
        if (n == 1) {
            res.push_back("()");
            return res;
        }
        pre_vec.push_back("()");
        while (--n) {
            for (int i = 0; i < pre_vec.size(); ++i) {
                string str = pre_vec[i];
                for (int j = 0; j < str.size(); ++j) {
                    string l_str, r_str, new_str;
                    l_str = str.substr(0, j);
                    r_str = str.substr(j, str.size());
                    new_str = l_str + "()" + r_str;
                    if (find(vec.begin(), vec.end(), new_str) == vec.end()) {
                        cout << new_str << endl;
                        vec.push_back(new_str);
                    }
                }
            }
            pre_vec = vec;
            cout << vec.size() << endl;
            res = vec;
            vec.clear();
        }
        return res;
    }
};
//leetcode submit region end(Prohibit modification and deletion)

int main() {
    Solution solution;
    solution.generateParenthesis(5);
}

回溯法

采用回溯法,当当前字符串的长度满足为2*n时,假如vector中,当左括号数小于n是添加左括号,当右括号数小于n时,添加右括号,由此就可以保证括号字符串一定合法

#include <vector>
#include <string>

using namespace std;

//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public:
    vector<string> generateParenthesis(int n) {
        vector<string> res;
        string str;
        backtrack(res,str,0,0,n);
        return res;
    }

    void backtrack(vector<string> &res,string str,int l,int r,int n){
        if (str.size()==n*2){
            res.push_back(str);
        } else{
            if (l<n){
                backtrack(res,str+'(',l+1,r,n);
            }
            if (r<l){
                backtrack(res,str+")",l,r+1,n);
            }
        }
    }
};
//leetcode submit region end(Prohibit modification and deletion)

int main() {
    Solution solution;
    solution.generateParenthesis(5);
}


标签:22,int,res,括号,vector,vec,str,LeetCode
From: https://blog.51cto.com/u_14189203/9065752

相关文章

  • LeetCode-23 合并 K 个升序链表
    LeetCode-23合并K个升序链表给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例1:输入:lists=[[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[1->4->5,1->3->4,2->6]将它们合并到一个有序链......
  • 【LeetCode】46. 全排列
    一、题目描述给定一个不含重复数字的数组nums,返回其所有可能的全排列。你可以按任意顺序返回答案。示例1:输入:nums=[1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例2:输入:nums=[0,1]输出:[[0,1],[1,0]]示例3:输入:nums=[1]输出:[[1]]提示:1<=nums.......
  • 【LeetCode】2055. 蜡烛之间的盘子
    一、题目描述给你一个长桌子,桌子上盘子和蜡烛排成一列。给你一个下标从0开始的字符串s,它只包含字符'*'和'|',其中'*'表示一个盘子,'|'表示一支蜡烛。同时给你一个下标从0开始的二维整数数组queries,其中queries[i]=[lefti,righti]表示子字符串s[lefti...rig......
  • 【LeetCode】23. 合并K个升序链表
    一、题目描述给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例1:输入:lists=[[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[1->4->5,1->3->4,2->6]将它们合并到一个有序链表中得到。1->1->2......
  • #yyds干货盘点# LeetCode程序员面试金典:赎金信
    给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。如果可以,返回 true ;否则返回 false 。magazine 中的每个字符只能在 ransomNote 中使用一次。 示例1:输入:ransomNote="a",magazine="b"输出:false示例2:输入:ransomNot......
  • #yyds干货盘点# LeetCode程序员面试金典:按权重随机选择
    题目给你一个下标从0开始的正整数数组w,其中w[i]代表第i个下标的权重。请你实现一个函数pickIndex,它可以随机地从范围[0,w.length-1]内(含0和w.length-1)选出并返回一个下标。选取下标i的概率为w[i]/sum(w)。例如,对于w=[1,3],挑选下标0的概率......
  • macOS Ventura 13.4 (22F66) Boot ISO 原版可引导镜像下载
    本站下载的macOS软件包,既可以拖拽到Applications(应用程序)下直接安装,也可以制作启动U盘安装,或者在虚拟机中启动安装。另外也支持在Windows和Linux中创建可引导介质。macOSVentura13.4包括以下增强功能和错误修复(2023年5月18日):解决了使用AppleWatch自动解锁不会......
  • 解决方案 | VS2022 + AutoCAD2024 + ObjectARX2024环境搭建过程
    一、准备工具1.vs2022自行网络搜索,各种版本均可(比如专业版、社区版),注意使用社区版必须使用最新版,目前是17.8版本,否则最终会无法使用样板。2.cad2024 自行网络搜索3.ObjectARX2024SDK和 ObjectARX2024 Wizard  3.1给出 ObjectARX2024SDK的下载地址:https://damasset......
  • leetcode 2.两数相加
    leetcode第二题:两数相加以链表为载体模仿加法进位,同时遍历两个链表,逐位计算它们的和,并与当前位置的进位值相加。如果两个链表的长度不同,则可以认为长度短的链表的后面有若干个0。如果链表遍历结束后,有carry>0,还需要在答案链表的后面附加一个节点,节点的值为carry。易错点:1.......
  • 22. 名词性从句-考点分析-长难句分析-识别主从1
    名词性从句-考点分析-长难句分析——能够各个名词性从句,并能翻译出来如何识别主从:从句充当主语——句首引代词是主语从句?(不一定);句首引代词是主语从句?——可能是是主语从句;也可能是状语从句.。如何识别主从:——1》只要见到引导词放句首,并且从句没有被逗号隔开,就一定是主从。主......