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

【中等】题解力扣22:括号生成

题目详情

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

示例 1:
输入:n = 3
输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]

示例 2:
输入:n = 1
输出:[“()”]

提示:

  • 1 <= n <= 8

解题思路

使用回溯法(深度优先搜索) 生成所有有效括号组合,核心思路如下:

  1. 有效括号条件
  • 左括号数量不能超过 n
  • 右括号数量不能超过左括号(确保有效性)。
  1. 递归终止条件:当前字符串长度达到 2n 时,将结果加入列表。
  2. 递归过程
  • 若左括号数量 < n,添加左括号并递归。
  • 若右括号数量 < 左括号数量,添加右括号并递归。
  1. 回溯:每次递归后删除最后一个字符,尝试其他组合。
  2. 优化:使用 StringBuilder 避免字符串拼接开销,减少内存消耗。

代码实现(Java版)

import java.util.ArrayList;
import java.util.List;class Solution {public List<String> generateParenthesis(int n) {List<String> result = new ArrayList<>();backtrack(result, new StringBuilder(), 0, 0, n);return result;}private void backtrack(List<String> result, StringBuilder current, int left, int right, int n) {if (current.length() == 2 * n) {result.add(current.toString());return;}if (left < n) {current.append('(');backtrack(result, current, left + 1, right, n);current.deleteCharAt(current.length() - 1); // 回溯}if (right < left) {current.append(')');backtrack(result, current, left, right + 1, n);current.deleteCharAt(current.length() - 1); // 回溯}}
}

代码说明

  1. 初始化
  • result 存储最终结果,StringBuilder current 动态构建当前组合。
  1. 回溯函数
  • 参数left(已用左括号数)、right(已用右括号数)、n(总对数)。
  • 终止条件current.length() == 2 * n 时保存有效组合。
  • 左括号分支:当 left < n 时,添加 ( 并递归。
  • 右括号分支:当 right < left 时,添加 ) 并递归。
  • 回溯操作:递归返回后删除末尾字符,恢复状态尝试其他分支。
  1. 效率关键
  • 通过条件剪枝避免无效组合。
  • StringBuilder 减少字符串操作开销。

提交详情(执行用时、内存消耗)

在这里插入图片描述

http://www.xdnf.cn/news/1136791.html

相关文章:

  • MyUI1.0全新现代化 Vue.js 组件库框架上线
  • HCIE - 云计算拿下后的职业选择如何规划?
  • 摩尔投票法:高效寻找数组中的多数元素
  • 基于在线地图的路径规划测评对比-综合对比城区、农村及城乡结合处的导航
  • 阿里云-通义灵码:隐私保护机制—为数据安全筑起铜墙铁壁
  • DolphinScheduler 如何高效调度 AnalyticDB on Spark 作业?
  • Flutter在Android studio运行出现Error: Entrypoint is not a Dart file
  • SpringBoot 使用MyBatisPlus
  • web APIs(更新中)
  • 【机器学习实战【七】】机器学习特征选定与评估
  • 聚类算法原理与应用(一):K-means聚类算法原理
  • 基础算法题
  • 如何轻松玩转多线程高并发?
  • Install Docker Engine on UbuntuMySQL
  • cdh6.3.2的hive使用apache paimon格式只能创建不能写报错的问题
  • Python包测试全攻略:从单元测试到持续集成
  • ZKmall开源商城架构助力增长:多端流量聚合与用户体验
  • GitHub开源轻量级语音模型 Vui:重塑边缘智能语音交互的未来
  • Python 网络爬虫 —— 提交信息到网页
  • 音视频同步技术初剖析:原理、实现与FFmpeg分析
  • CrewAI与LangGraph:下一代智能体编排平台深度测评
  • 深度学习前置知识
  • PyTorch边界感知上下文神经网络BA-Net在医学图像分割中的应用
  • ubuntu基础搭建
  • 基于dcmtk的dicom工具 第二章 图像接受StoreSCP(2)
  • ubuntu22 npm install electron --save-dev 失败
  • LVDS系列21:Xilinx 7系ISERDESE2原语(二)
  • 一款基于PHP开发的不良事件上报系统源码,适用于医院安全管理。系统提供10类事件类别、50余种表单,支持在线填报、匿名上报及紧急报告。
  • [MRCTF2020]Ezpop
  • 直播带货与开源AI智能名片链动2+1模式S2B2C商城小程序:重塑电商营销新格局