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

LeetCode 电话号码的字母组合题解

LeetCode 电话号码的字母组合题解

题目描述

给定一个包含数字 2-9 的字符串,返回所有它能表示的字母组合。

示例

输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]

解题思路

方法:回溯

思路

  • 使用回溯算法来解决这个问题。
  • 首先建立一个数字到字母的映射表。
  • 从第一个数字开始,尝试所有可能的字母:
    • 选择当前数字对应的字母,加入路径。
    • 递归处理下一个数字。
    • 回溯:撤销选择,继续尝试其他字母。
  • 当路径长度等于数字字符串长度时,将路径加入结果列表。

复杂度分析

  • 时间复杂度:O(4^n * n),其中 n 是数字字符串的长度。每个数字最多对应 4 个字母。
  • 空间复杂度:O(n),递归调用栈的深度为 n。

代码实现

方法:回溯

# 电话号码的字母组合(回溯) def letter_combinations(digits): if not digits: return [] phone_map = { '2': 'abc', '3': 'def', '4': 'ghi', '5': 'jkl', '6': 'mno', '7': 'pqrs', '8': 'tuv', '9': 'wxyz' } result = [] path = [] def backtrack(index): if index == len(digits): result.append(''.join(path)) return digit = digits[index] for letter in phone_map[digit]: path.append(letter) backtrack(index + 1) path.pop() backtrack(0) return result # 测试 def test_letter_combinations(): digits = "23" print(letter_combinations(digits)) # 输出:['ad', 'ae', 'af', 'bd', 'be', 'bf', 'cd', 'ce', 'cf'] if __name__ == "__main__": test_letter_combinations()

测试用例

测试用例 1:基本情况

输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]

测试用例 2:空字符串

输入:digits = ""
输出:[]

总结

电话号码的字母组合是一个经典的回溯算法问题,它可以通过回溯算法来高效地解决。

回溯算法的核心思想是:从第一个数字开始,尝试所有可能的字母,递归处理下一个数字,然后撤销选择。

掌握回溯算法的使用方法,对于解决类似的问题非常重要。

http://www.jsqmd.com/news/785306/

相关文章:

  • 别再为Word转PDF发愁了!Java项目集成Aspose.Words保姆级教程(附Linux字体配置)
  • 物流人必看:除了EIQ,你的WMS系统真的用对了吗?结合ABC分类优化库位与拣货路径实战
  • 2026年AI搜索优化TOP10实力排行 权威机构红榜盘点 - 打我的的
  • 大模型提示注入攻防实战(SITS2026 v2.1新增条款深度解读)
  • CANN Qwen3-next SGLang优化实践样例
  • CANN/atvc SinhCustom算子样例
  • 51单片机入门避坑指南:从Keil5安装到LCD1602显示,新手最容易犯的5个错误
  • 清洁度检测精度低难题待解?国内高精度清洁度检测设备厂家大盘点 - 工业干货社
  • 企业生成式AI治理框架构建:从战略到落地的四大支柱与实践指南
  • 43 Nginx的location指令
  • 鑫桥包装:以匠心筑品质,打造高性价比贴标机定制服务标杆 - 品牌策略师
  • CANN/shmem RDMA性能测试示例
  • FWT 集合幂级数
  • 基于可穿戴设备与AI的体重变化预测:从血糖、活动、睡眠数据到个性化健康管理
  • 力扣2760 C++滑动窗口解法
  • 移动干扰源定位系统:原理、配置与实战技巧
  • Ubuntu 20.04换源踩坑实录:手把手教你修复‘held broken packages’报错(附清华源正确姿势)
  • RSSHub与Dify插件实战:构建智能信息流与自动化监控工作流
  • 用最便宜的STM32F103C8T6做个自平衡小车?先搞定MPU6050+DMP姿态角(附完整代码)
  • 龙芯2k0300 - 走马观碑组按键驱动移植
  • AI公平性实战指南:从算法偏见来源到缓解策略全解析
  • 市场报告对比:液冷清洁度检测设备怎么选?西恩士提全套解决方案 - 工业干货社
  • 别再手动清C盘了!分享一个我用了3年的Windows10垃圾清理.bat脚本(附详细注释)
  • UX设计师如何驾驭生成式AI:从工具使用者到AI策展人的实践指南
  • cann/sip:信号处理加速库CgemvBatchedOperation C++ Demo
  • taotoken平台openai兼容api的python调用基础教程
  • 《落海的人》的内容入口:低潮情绪如何被记住
  • Claude API用量监控桌面小组件开发实战:Python+SwiftBar实现成本可视化
  • 告别VSCode!在Ubuntu 22.04上用Vim+YouCompleteMe打造丝滑C++开发环境(保姆级避坑指南)
  • 42 Nginx的server_name匹配执行顺序