当前位置: 首页 > 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;}
};  
http://www.dtcms.com/a/138057.html

相关文章:

  • 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发布,更好用了
  • Java对接Dify API接口完整指南
  • 吴恩达深度学习复盘(19)XGBoost简介|神经网络与决策树
  • openai发布今天发布了o3和o4-mini。
  • Selenium 实现自动化分页处理与信息提取
  • 【JavaEE】Maven配置
  • (leetcode算法题)309. 买卖股票的最佳时机含冷冻期
  • 【音视频】音视频FLV合成实战
  • 界面开发框架DevExpress XAF实践:如何在Blazor项目中集成.NET Aspire?(一)
  • 拖拉拽效果加点击事件
  • 智慧交通内容及发展趋势概述