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

057电话号码的字母组合

电话号码的字母组合题目链接https://leetcode.cn/problems/letter-combinations-of-a-phone-number/description/?envTypestudy-plan-v2envIdtop-100-liked我的解答int[] first new int[]{0, 3, 6, 9, 12, 15, 19, 22, 26}; StringBuilder sb new StringBuilder(); public ListString letterCombinations(String digits) { ListString ans new ArrayList(); backtrack(digits, 0, ans); return ans; } public void backtrack(String digits, int cur, ListString ans){ if(cur digits.length()){ ans.add(sb.toString()); return; } int curIndex digits.charAt(cur) - 2; //每一种字母都选一遍 for(int ifirst[curIndex]; ifirst[curIndex1]; i){ char ch (char) (i a); sb.append(ch); backtrack(digits, cur1, ans); //回溯 sb.deleteCharAt(cur); } }分析​ 代码的时间复杂度为O(3^m * 4^n)空间复杂度为O(mn)其中 m 是输入中对应 3 个字母的数字个数包括数字 2、3、4、5、6、8n 是输入中对应 4 个字母的数字个数包括数字 7、9mn 是输入数字的总个数。​ 解题思路采用递归回溯解题。用first数组维护每个数字能表示的第一个字母的下标字母下标范围为0~25递归遍历到digits中的每个数字时将此数字能表示的字母都选择一遍直到digits遍历完最后一个数字后收集答案。看了官方题解后的解答//方法回溯 //时间复杂度O(3^m * 4^n)其中 m 是输入中对应 3 个字母的数字个数包括数字 2、3、4、5、6、8n 是输入中对应 4 个字母的数字个数包括数字 7、9mn 是输入数字的总个数。 //空间复杂度O(mn) public ListString letterCombinations(String digits) { ListString ans new ArrayList(); MapCharacter, String phoneMap new HashMap(){{ put(2, abc); put(3, def); put(4, ghi); put(5, jkl); put(6, mno); put(7, pqrs); put(8, tuv); put(9, wxyz); }}; backtrack(digits, 0, new StringBuffer(), phoneMap, ans); return ans; } public void backtrack(String digits, int cur, StringBuffer sb, MapCharacter, String phoneMap, ListString ans){ if(cur digits.length()){ ans.add(sb.toString()); return; } char digit digits.charAt(cur); String letters phoneMap.get(digit); int lettersCount letters.length(); for(int i0; ilettersCount; i){ sb.append(letters.charAt(i)); backtrack(digits, cur 1, sb, phoneMap, ans); sb.deleteCharAt(cur); } }分析官方的解题思路与我的解答一致唯一的区别在于我选择用数组first维护每个数字代表的字母而官方采用哈希表维护。总结本题只需掌握基本的递归回溯方法唯一需要思考的就是如何维护每个数字代表的字母。
http://www.rkmt.cn/news/1384040.html

相关文章:

  • 测试工程师常用的python库
  • D2DX:让《暗黑破坏神2》在现代PC上焕发新生的终极方案
  • 告别手动测试!VtestStudio结合CAPL脚本实现自动化测试的保姆级教程
  • Universal-Updater性能优化技巧:3DS内存受限环境下的高效编程
  • 开源工业控制器的终极实战指南:如何用OpenPLC替代传统PLC实现高效自动化
  • SpliceAI:深度学习剪接变异预测的终极指南
  • 基于XGBoost预测与优化分簇的6G无人机网络性能提升
  • 优质电商独立站 跨境电商海外b2b2c独立站系统推荐
  • 基于ESP32的宽频主动式RFID信号探测仪设计与实现
  • GB/T 44464-2024正式实施:汽车数据安全新国标逐条解读,车企合规需要做什么?
  • Claude Code用户如何配置Taotoken解决密钥被封与Token不足难题
  • 如何快速解锁艾尔登法环帧率限制:终极性能优化指南
  • AI Agent 面试题 957:Computer Use Agent的原理和实现方案
  • LayerPlayer扩展开发:如何添加自定义CALayer子类
  • 深度解析HS2-HF Patch:从技术框架到创作工具链的完整升级方案
  • BiliRoamingX:彻底解决B站体验限制的完整增强方案
  • 【2026最新图文教程】Git下载安装、全配置详解|从零配置到运行,新手小白快速上手
  • WarcraftHelper终极指南:深度解析魔兽争霸III现代化兼容性解决方案
  • Graphin高级应用:结合GISDK构建配置化图分析模块的完整指南
  • Wireshark解密SSH流量实战:获取会话密钥四步法
  • CTF流量分析实战:从以太网帧到TLS握手的多层穿透方法
  • AI Agent 面试题 958:LangChain框架的核心架构和设计理念详解
  • 几何操作与语义操作映射边界:自指认知几何学的形式化体系(世毫九实验室原创研究)
  • 蓝桥杯软件测试备考:用Python+Selenium搞定Web自动化那些高频考点(附完整代码)
  • 宁波梅雨季来临,房屋漏水抓紧修!2026最新房屋漏水维修公司TOP5调研盘点!卫生间免砸砖防水、楼顶外墙、阳光房+地下室渗漏解决方案解析 - 防水百科
  • 基于ESP32与Telegram Bot的物联网互动设备开发实战
  • AI Agent 面试题 956:Agent操作系统的网络通信和服务发现
  • 基于ESP32与Linky电表打造三相智能电力负荷管理器
  • 泰州梅雨季来临,房屋漏水抓紧修!2026最新房屋漏水维修公司TOP5调研盘点!卫生间免砸砖防水、楼顶外墙、阳光房+地下室渗漏解决方案解析 - 防水百科
  • 虚幻5 Unrealsharp EditorTick + Nanite雪地踩坑记录