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~

相关推荐
海绵宝宝转agent8 小时前
JUC高频面试八股总结个人开源
面试·职场和发展
Nil2089 小时前
leetcode 118杨辉三角
算法·leetcode·职场和发展
wanderist.11 小时前
线性筛法详解:从筛质数到欧拉函数、Möbius 函数与约数函数
java·数据结构·算法
All for pursuit.11 小时前
【设计-1】208.实现Trie (前缀树)
数据结构·c++·算法·leetcode
weixin_3077791311 小时前
C++代码实现MATLAB中的crossval函数功能
开发语言·c++·算法·matlab
青少儿编程课堂12 小时前
背包问题(0/1 背包与完全背包)解题精讲——动态规划入门
c++·python·算法·bfs·信息学竞赛
光影少年12 小时前
为什么 JavaScript 中 0.1 + 0.2 !== 0.3,如何让其相等?
前端·javascript·算法
HEJOO912 小时前
Linux 设备驱动系列——使用全局工作队列
java·linux·算法
Code_Solitude13 小时前
c语言:递归
java·c语言·算法
我命由我1234513 小时前
Photoshop - Photoshop 使用内容识别填充移除对象
学习·职场和发展·产品运营·求职招聘·职场发展·学习方法·photoshop