当前位置: 首页 > news >正文

LeetCode hot 100—括号生成

题目

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

示例

示例 1:

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

示例 2:

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

分析

为了生成所有可能的并且有效的括号组合,可以使用回溯算法。回溯算法通过递归的方式,尝试所有可能的括号组合,并在生成过程中确保组合的有效性。

回溯法

代码解释

回溯函数 backtrack

open:当前已经使用的左括号的数量。

close:当前已经使用的右括号的数量。

max:括号的对数。

当 current 的长度达到 2 * max 时,说明已经生成了一个完整的括号组合,将其添加到 result 中。

如果 open 小于 max,可以添加一个左括号,并递归调用 backtrack

如果 close 小于 open,可以添加一个右括号,并递归调用 backtrack

时间复杂度:O(\frac{4^{n}}{\sqrt{n}})

空间复杂度:O(n)

class Solution {
private:// 回溯函数,用于生成括号组合void backtrack(std::vector<std::string>& result, std::string current, int open, int close, int max) {// 当当前组合的长度达到 2 * max 时,说明已经生成了一个完整的括号组合if (current.length() == max * 2) {result.push_back(current);return;}// 如果左括号的数量小于 max,则可以添加一个左括号if (open < max) {backtrack(result, current + '(', open + 1, close, max);}// 如果右括号的数量小于左括号的数量,则可以添加一个右括号if (close < open) {backtrack(result, current + ')', open, close + 1, max);}}
public:std::vector<std::string> generateParenthesis(int n) {std::vector<std::string> result;backtrack(result, "", 0, 0, n);return result;}
};  

相关文章:

  • Hyperf (Swoole)的多进程 + 单线程协程、Gin (Go)Go的单进程 + 多 goroutine 解说
  • 深入剖析 ORM:原理、优缺点、场景及多语言框架示例
  • 消除异步的传染性(代数效应)
  • ARINC818-1协议
  • 网易游戏 x Apache Doris:湖仓一体架构演进之路
  • 鸿蒙系统开发中路由使用详解
  • 【并行分布计算】Hadoop伪分布搭建
  • 【并行分布计算】Hadoop单机分布搭建
  • ubuntu docker 创建镜像 报错 dial tcp xxxx read udp xxxx i/o timeout 还有 Forbidden
  • 秘密任务 2.0:如何利用 WebSockets + DTOs 设计实时操作
  • Redis面试——常用命令
  • 【KWDB 创作者计划】_上位机知识篇---SDK
  • Python入门安装和语法基础
  • Ubuntu多用户VNC远程桌面环境搭建:从零开始的完整指南
  • java 设计模式之代理模式
  • [形象解析] ptmalloc、tcmalloc与jemalloc对比
  • PHP序列化/反序列化漏洞原理
  • 杂记-LeetCode中部分题思路详解与笔记-HOT100篇-其三
  • 告别定时任务!用Dagster监听器实现秒级数据响应自动化
  • [ComfyUI]重磅升级,FLUX.1-dev-ControlNet-Union-Pro-2.0发布,更好用了
  • 央企通号建设集团有限公司原党委常委、副总经理叶正兵被查
  • 研究显示:肺活量衰减始于20至25岁
  • 特朗普与普京通话前夕,英美法德意领导人通话讨论俄乌问题
  • 女巫的继承者们
  • 历史缝隙里的人︱觑功名如画饼:盛世“做题家”的攀爬与坠落
  • 以色列在加沙发起新一轮强攻,同步与哈马斯展开“无条件谈判”