Leetcode:括号生成

题目链接:22. 括号生成 - 力扣(LeetCode)

题目分析

1、括号的类型只有()一种,没有{}或者[]

2、括号可以进行多层嵌套

3、有效的括号组合需要满足以下两个条件***(任意一个子串)***

  • 总体上,左括号数量 == 右括号数量
  • 从左向右开始数一个子串时,在任意时刻,左括号的数量 >= 右括号数量

4、当我们开始进行生成时,会出现下图所示的过程:

  • 当left大于等于n时就不能再添加左括号
  • 当right大于等于left时也不能添加左括号
  • 当right==n时开始回退***(因为先添加的肯定是左括号,所以后添加的右括号都等于n了,那么左括号应该也满足了)***

普通版本(回溯)

cpp 复制代码
class Solution {
    int left,right,m;
    string path;//每一条路径上的最终结果
    vector<string> res;//最终结果
public:
    vector<string> generateParenthesis(int n) {
       m = n;
       dfs();//当dfs函数走完后所有的括号就完成了括号的组成
       return res;
    }

    void dfs()
    {
        if(right == m)
        {
            res.push_back(path);//将当前组合完成的子串尾插给最终结果
            return;
        }

        if(left < m)//用递归添加左括号
        {
            path.push_back('(');
            ++left;
            dfs();
            path.pop_back();
            --left;
        }

        if(right < left)//添加右括号
        {
            path.push_back(')');
            ++right;
            dfs();
            path.pop_back();
            --right;
        }
    }
};

优化版本(待补充)

~over~

相关推荐
Dizzy.51713 分钟前
数据结构(查找)
数据结构·学习·算法
hello_simon1 小时前
【Word转PDF】在线Doc/Docx转换为PDF格式 免费在线转换 功能强大好用
职场和发展·pdf·word·学习方法·word转pdf·石墨文档·word转换
分别努力读书3 小时前
acm培训 part 7
算法·图论
武乐乐~3 小时前
欢乐力扣:赎金信
算法·leetcode·职场和发展
'Debug3 小时前
算法从0到100之【专题一】- 双指针第一练(数组划分、数组分块)
算法
Fansv5873 小时前
深度学习-2.机械学习基础
人工智能·经验分享·python·深度学习·算法·机器学习
测试19984 小时前
接口测试工具:Postman
自动化测试·软件测试·python·测试工具·职场和发展·接口测试·postman
yatingliu20195 小时前
代码随想录算法训练营第六天| 242.有效的字母异位词 、349. 两个数组的交集、202. 快乐数 、1. 两数之和
c++·算法
uhakadotcom5 小时前
Google DeepMind最近发布了SigLIP 2
人工智能·算法·架构
sjsjs115 小时前
【数据结构-并查集】力扣1202. 交换字符串中的元素
数据结构·leetcode·并查集