Algorithms first
电话号码的字母组合 · 交互式算法学习
返回电话按键数字可表示的所有字母组合。
#17 · 回溯
电话号码的字母组合
Letter Combinations of a Phone Number
digits = "23"递归树3 个关键状态
步骤 1选择 2 的字母 a。
path=a推荐
回溯生成当前路径
时间
O(4^n)空间 O(n)路径长度等于数字数时输出,否则枚举当前按键字母。
1function letterCombinations(d) {2 if (!d) return [];3 const map = ['', '', 'abc', 'def', 'ghi', 'jkl', 'mno', 'pqrs', 'tuv', 'wxyz'],4 out = [];5 6 function dfs(i, path) {7 if (i === d.length) {8 out.push(path);9 return10 }11 for (const c of map[d[i]]) dfs(i + 1, path + c)12 }13 dfs(0, '');14 return out;15}多语言参考
来源 · CC BY-SA 4.0 ↗Java · C++ · Go
这是一组同题正确实现,独立于上方当前动画方法;不同语言可能采用另一种正确策略。
1class Solution {2 public List<String> letterCombinations(String digits) {3 List<String> ans = new ArrayList<>();4 if (digits.length() == 0) {5 return ans;6 }7 ans.add("");8 String[] d = new String[] {"abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};9 for (char i : digits.toCharArray()) {10 String s = d[i - '2'];11 List<String> t = new ArrayList<>();12 for (String a : ans) {13 for (String b : s.split("")) {14 t.add(a + b);15 }16 }17 ans = t;18 }19 return ans;20 }21}交互式算法学习
从执行步骤真正理解 LeetCode 经典 150
本站整理 150 道高频算法面试题和 302 种解法。动画方法同步展示 JavaScript 与 Python;每题另提供 Java、C++ 与 Go 同题参考实现。
AlgoViz Lab
电话号码的字母组合 · 解法对比
返回电话按键数字可表示的所有字母组合。
- 测试用例
digits = "23"- 题目分类
- 回溯
- 解法对比
- 2
笛卡尔积逐层扩展
从空串开始,每个数字把已有前缀扩展成多份。
- 时间
O(4^n)- 空间
O(4^n)
回溯生成当前路径
路径长度等于数字数时输出,否则枚举当前按键字母。
- 时间
O(4^n)- 空间
O(n)