回溯

电话号码的字母组合

中等#17Java时间 O(L·4ᴸ),L 为数字长度空间 O(L),不计结果

题目要做什么

输入只含 2 到 9 的电话键盘数字,返回它们对应的所有字母组合。空字符串返回空数组。

题目示例输入digits = "23"
题目示例输出["ad","ae","af","bd","be","bf","cd","ce","cf"]

01 为什么这样做

每层处理一个数字,枚举它对应的字母,向路径追加后进入下一位。数字都处理完就记录字符串。

始终成立的条件

path 长度等于 index,恰好选定前 index 个数字的字母。

02 看见算法执行

动画与代码同步

修改输入,播放自己的例子

当前使用题目示例
修改输入会改变执行过程;预期输出用于核对结果。
数组 / nums步骤 1
执行状态
本次演示输出播放到最后查看

Solution.java参考解法
1class Solution {2    private final String[] letters = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};3    public List<String> letterCombinations(String digits) {4        List<String> result = new ArrayList<>();5        if (digits.isEmpty()) return result;6        search(digits, 0, new StringBuilder(), result);7        return result;8    }9    private void search(String digits, int index, StringBuilder path, List<String> result) {10        if (index == digits.length()) {11            result.add(path.toString());12            return;13        }14        String choices = letters[digits.charAt(index) - '0'];15        for (int i = 0; i < choices.length(); i++) {16            path.append(choices.charAt(i));17            search(digits, index + 1, path, result);18            path.deleteCharAt(path.length() - 1);19        }20    }21}

键盘控制:A 后退 · D 前进

编程练习

↑↓ 选择↵ 打开Pagefind 全文检索