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

学校网站建设联系电话用花生壳免费域名做公司网站

学校网站建设联系电话,用花生壳免费域名做公司网站,专注咖啡相关的网站,删除自豪地采用wordpress🚀 LeetCode 字符串数字映射(Swift)——电话号码字母组合 在日常刷题或面试中,我们经常会遇到字符串 回溯组合的问题。这道经典题——电话号码的字母组合 就是典型代表。本文将带你用 Swift 实现这道题,思路清晰&…

🚀 LeetCode 字符串数字映射(Swift)——电话号码字母组合

在日常刷题或面试中,我们经常会遇到字符串 + 回溯组合的问题。这道经典题——电话号码的字母组合 就是典型代表。本文将带你用 Swift 实现这道题,思路清晰,代码可复用,适合初学者和进阶者。


📌 题目描述

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

每个数字映射到一些字母,和电话按键类似:

2 → abc  
3 → def  
4 → ghi  
5 → jkl  
6 → mno  
7 → pqrs  
8 → tuv  
9 → wxyz

🧨 注意:

  • 数字 10 不对应任何字母,应直接丢弃忽略
  • 返回所有可能的组合,顺序不限

🧠 解题思路

  1. 使用 回溯算法(Backtracking)构造所有组合路径。
  2. 构造一个 数字到字母的映射字典
  3. 从第一个数字开始递归,每次递归选择当前数字对应的所有字母之一,继续向下拼接。
  4. 一旦组合的长度等于有效数字长度(不含 0 和 1),就加入结果集。

🧑‍💻 Swift 实现

class Solution {func letterCombinations(_ digits: String) -> [String] {// 数字到字母的映射表(电话按键)let phoneMap: [Character: String] = ["2": "abc", "3": "def", "4": "ghi","5": "jkl", "6": "mno", "7": "pqrs","8": "tuv", "9": "wxyz"]// 过滤掉无效字符(只保留2~9)let filteredDigits = digits.filter { phoneMap.keys.contains($0) }guard !filteredDigits.isEmpty else {return [] // 全是0或1时,直接返回空数组}var result: [String] = []// 回溯函数:index表示当前处理的位置,path是当前已生成的组合func backtrack(_ index: Int, _ path: String) {// 如果已组合的长度等于有效数字长度,表示组合完成if index == filteredDigits.count {result.append(path)return}// 当前数字let digit = filteredDigits[filteredDigits.index(filteredDigits.startIndex, offsetBy: index)]// 对应的所有字母let letters = phoneMap[digit]!// 遍历所有字母,递归处理下一个位置for letter in letters {backtrack(index + 1, path + String(letter))}}// 从第0位开始回溯backtrack(0, "")return result}
}

🧪 测试示例

let solution = Solution()
print(solution.letterCombinations("23"))
print(solution.letterCombinations("1039"))

⏱ 时间复杂度分析

设有效输入数字长度为 n

  • 每个数字最多对应 4 个字母
  • 整体组合数量最多为 4^n

时间复杂度:

  • O(4^n * n)

空间复杂度:

  • O(n * 4^n)

✅ 总结

  • 本题是典型的 回溯 应用,适合练习组合类题目。
  • 01 的处理需特别注意。
  • 实际应用中也非常有参考价值。

🔁 拓展思考与实现

💡 1. 字典序排序

return result.sorted()

💡 2. 非递归实现

func letterCombinationsIterative(_ digits: String) -> [String] {let phoneMap: [Character: String] = ["2": "abc", "3": "def", "4": "ghi","5": "jkl", "6": "mno", "7": "pqrs","8": "tuv", "9": "wxyz"]var queue: [String] = [""]for digit in digits {guard let letters = phoneMap[digit] else { continue }var newQueue: [String] = []for prefix in queue {for letter in letters {newQueue.append(prefix + String(letter))}}queue = newQueue}return queue.count > 1 || queue[0] != "" ? queue : []
}

💡 3. 自定义映射支持

func letterCombinations(_ digits: String, withMapping mapping: [Character: String]) -> [String] {let filteredDigits = digits.filter { mapping.keys.contains($0) }guard !filteredDigits.isEmpty else { return [] }var result: [String] = []func backtrack(_ index: Int, _ path: String) {if index == filteredDigits.count {result.append(path)return}let digit = filteredDigits[filteredDigits.index(filteredDigits.startIndex, offsetBy: index)]for letter in mapping[digit]! {backtrack(index + 1, path + String(letter))}}backtrack(0, "")return result
}

🏁 如果你觉得有帮助

欢迎点赞👍、收藏📂、关注我!

http://www.dtcms.com/wzjs/811311.html

相关文章:

  • 50m专线做视频网站怎样才能在百度上发布信息
  • 网站内链是什么seo范畴
  • 网站用户维护网络营销品牌推广公司哪家好
  • 企业网站宣传册应该哪个部门做广东建设信息网三类人
  • 龙华城市建设局网站wordpress 菜单插件
  • 佛山白坭网站建设网站建设开发有限公司
  • 静态企业网站模板下载达人室内设计网免费注册
  • 网站建设与网站开发支付宝手机网站签约
  • 个人优秀网站网站制作 数据库
  • 莱芜网站建设资情况介绍赣州章贡区哪里要招工
  • 电子商务网站系统规划wordpress 繁體
  • 平面设计网站有哪些比较好的做一个网站成本要多少钱
  • 怎么做属于自己的领券网站搜索指数查询平台
  • 西安网站制作建设学网站建设与维护
  • 长沙网站建设公司名单网页设计图片排版怎么设置
  • 做律师网站深圳工程建设有限公司
  • 盐城网站建设厂商南京企业网站开发公司
  • 包头北京网站建设wordpress音乐主题推荐
  • 网站app的意义公司官网怎么编辑
  • 台州做网站那家好广东省自然资源厅陈光荣
  • 查询网站名有没有收录seo是什么意思啊电商
  • 网站建设公司2018-10-1wordpress底部九栏
  • 建设营销网站的目的网站 建设app
  • 园林网站模板下载电脑公司网站模板下载
  • 湛江免费企业建站网站制作公司浩森宇特
  • 工程建设标准网官方网站上传网站图片不显示
  • 禅城容桂网站制作湖南seo优化企业
  • 有没有专门做蛋糕的网站百度给做网站吗
  • 佛山做网站哪家公司好如何高效建设品牌网站
  • 宜昌市住房和城乡建设厅官方网站ip查询地址精准地图