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

059括号生成

括号生成题目链接https://leetcode.cn/problems/generate-parentheses/description/?envTypestudy-plan-v2envIdtop-100-liked我的解答public ListString generateParenthesis(int n) { ListString ans new ArrayList(); backtreack(n, 0, 0, new StringBuffer(), ans); return ans; } //left左括号的个数 right右括号的个数 public void backtreack(int n, int left, int right, StringBuffer output, ListString ans){ if(right n){ ans.add(output.toString()); return; } if(left 1 n){ //选取左括号 left; output.append((); backtreack(n, left, right, output, ans); //回溯 left--; output.deleteCharAt(output.length()-1); } if(right 1 left){ //选取右括号 right; output.append()); backtreack(n, left, right, output, ans); //回溯 right--; output.deleteCharAt(output.length()-1); } }分析代码的时间复杂度计算复杂详情请参考官方解析方法二中的时间复杂度分析空间复杂度为O(n)。解题思路采用递归 回溯方法思路简单故不赘述。看了官方题解后的解答//方法一暴力法(思路简单效率低故直接粘贴了官方的解答) //时间复杂度O(n*2^2n)对于2^2n个序列中的每一个我们用于建立和验证该序列的复杂度为 O(n)。 //空间复杂度O(n) public ListString generateParenthesis(int n) { ListString combinations new ArrayListString(); generateAll(new char[2 * n], 0, combinations); return combinations; } public void generateAll(char[] current, int pos, ListString result) { if (pos current.length) { if (valid(current)) { result.add(new String(current)); } } else { current[pos] (; generateAll(current, pos 1, result); current[pos] ); generateAll(current, pos 1, result); } } public boolean valid(char[] current) { int balance 0; for (char c: current) { if (c () { balance; } else { --balance; } if (balance 0) { return false; } } return balance 0; } //方法二回溯法此方法与我的解答一致但我参考官方解答将我的解答略微优化了一些多于的步骤 //时间复杂度本方法的时间复杂度计算复杂详情请参考官方解析 //空间复杂度O(n) public ListString generateParenthesis(int n) { ListString ans new ArrayList(); backtreack(n, 0, 0, new StringBuffer(), ans); return ans; } //left左括号的个数 right右括号的个数 public void backtreack(int n, int left, int right, StringBuffer output, ListString ans){ if(right n){ ans.add(output.toString()); return; } if(left n){ //选取左括号 output.append((); backtreack(n, left1, right, output, ans); //回溯 output.deleteCharAt(output.length() - 1); } if(right left){ //选取右括号 output.append()); backtreack(n, left, right1, output, ans); //回溯 output.deleteCharAt(output.length() - 1); } } //方法三按括号序列的长度递归 //本方法的时间复杂度和空间复杂度计算复杂详情请参考官方解析 ArrayList[] cache new ArrayList[9]; public ListString generateParenthesis(int n) { return generate(n); } public ListString generate(int n){ if(cache[n] ! null){ return cache[n]; } ArrayListString res new ArrayList(); if(n 0){ res.add(); } else{ for(int i0; in; i){ for(String left : generate(i)){ for(String right : generate(n-1-i)){ res.add(( left ) right); } } } } cache[n] res; return res; }分析​ 1、方法一采用暴力枚举每次对枚举出的结果进行验证若是有效答案则加入结果。​ 2、方法二在方法一的基础上进行了优化递归前先通过左括号和右括号的个数进行判断保证递归的答案一定是有效的。​ 3、方法三的解题思路对于每一个有效的括号序列一定是以(“开头以”)结尾的所以每一个有效的括号序列都是 (a)b 的形式其中a和b既可以为空也可以是有效的括号序列。经过以上分析我们只需递归计算 a 的所有可能和 b 的所有可能遍历 a 与 b 的所有可能性并拼接即可得到所有长度为 2n 的括号序列。另外为了节省计算时间我们可以在每次 generate(i) 函数返回之前把返回值存储起来下次再调用 generate(i) 时可以直接返回不需要再递归计算。总结本题只需掌握基本的递归与回溯即可。对于本题的方法三我们需要善于观察与总结关键在于“对于每一个有效的括号序列一定是以(“开头以”)结尾的所以每一个有效的括号序列都是 (a)b 的形式其中a和b既可以为空也可以是有效的括号序列”这个结论在这个结论的基础上可以很轻松的得出“a、b可能性拼接”的解题方法。
http://www.zskr.cn/news/1397142.html

相关文章:

  • 基于ResNet50-SLT与Seq2Seq的自动图像标注系统:原理、实现与优化
  • 2026年 电热管/模温机电热管/单头电热管/法兰式电热管/高温电热管/双头电热管/PET高温电热管厂家推荐:热导效率与耐温性能双重保障的源头品牌榜单 - 品牌企业推荐师(官方)
  • 面试鸭:你的面试通关加速器,1万+高频题库免费刷
  • 公安部:智能网联汽车道路测试与示范应用安全通行规范 2026
  • Spring AI Multi-Agent 生产级实战:从原理、架构到高并发落地
  • Spring Boot + WebSocket 群聊已读未读:从 Demo 到生产级架构设计与落地
  • Unabyss 智能内容生成与应用场景实战
  • 从零构建MATLAB GUI手写板:集成CNN模型实现实时数字识别
  • 让多智能体不互相打架 责任边界设计比提示词更重要
  • AI应用开发学习路径/50W年薪构成
  • 从m4s到MP4:数字内容保存者的技术救赎之路
  • SRIS-Net:基于空间-频域融合与双任务引导的鲁棒图像隐写术
  • 避坑指南:R语言raster读取栅格时,na.rm参数没设置对,结果全变NA了怎么办?
  • 2026涡街流量计国产十大品牌深度测评:依斯特稳居榜首,谁在撬动工业过程控制新格局? - 水质仪表品牌排行榜
  • Go语言Web安全防护实战
  • C语言详细入门教学_c语言教程_C语言入门教程
  • 从零打造可落地的直流电机 PID 驱动系统 (十一):控制超调【完整工程源码 + 可直接复用】
  • 2026年 起重机厂家推荐排行榜:单梁/双梁/桥式/欧式起重机、电动葫芦、环链电动葫芦、升降平台优质品牌深度解析与选购指南 - 品牌企业推荐师(官方)
  • 2026年NEW趋势下,如何挑选河南夜用成人护理垫实力厂商? - 2026年企业资讯
  • 2026现阶段深圳知名的股权架构设计律师深度评测:为何侯松涛律师成为企业家的战略? - 2026年企业资讯
  • 基于进化信息与XGBoost的淀粉样蛋白预测:特征工程与模型构建全解析
  • 2026年5月论文降AI工具实测:4款知网可用软件推荐
  • 2026年加热管厂家榜单:单头/双头/高温/模温机加热管,工业加热核心优选推荐 - 品牌企业推荐师(官方)
  • Lovable平台灰度发布事故复盘:一次配置错误引发的30万用户课程中断,我们用11分钟热修复的底层机制
  • MongoDB 复制(副本集)
  • Perl 时间日期处理指南
  • 开发AI应用时如何利用Taotoken统一管理多个API密钥
  • PHIL系统灵敏度分析:从稳定性到抗扰度的量化设计指南
  • 告别卡顿!用批处理一键优化Win10这7个服务,老电脑也能再战三年
  • 2026国产气体涡轮流量计十大品牌深度解析:技术突围与选型实战指南 - 水质仪表品牌排行榜