最近,25 大厂的 秋招提前批 已经开始了!!!
有想去大厂实习或面试的小伙伴需要抓住 提前批 的机会,先试试水噢!!!
但有些小伙伴不够自信,担心自己实力不够,纠结要不要投提前批。害怕如果面试时印象不好,可能会影响后续的秋招录取。
对于准备得不太充分的小伙伴,其实也不用过于慌张。无论提前批有没有开始,都要 稳住自己的节奏,尽量 不被外界的节奏带偏 ,自己做好充分准备后再猛冲也不晚。
小编这里准备了一份 Java 八股文面试题,有需要的小伙伴可以 关注公众号,回复关键词 「1024」 获得。
速刷一遍,查漏补缺!!!
另外,想 系统刷题 的小伙伴也可以点击链接了解下 八股文小程序 ,助力面试顺利,Offer 拿到手软!!!
言归正传,今天我们继续来学习 「力扣高频题」 系列。
17. 电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例 1:
输入: digits = “23”
输出: [“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]
示例 2:
输入: digits = “”
输出: []
示例 3:
输入: digits = “2”
输出: [“a”,“b”,“c”]
- 提示:
- 0 <= digits.length <= 4
- digits[i] 是范围 [‘2’, ‘9’] 的一个数字。
思路分析
该题的背景意义就是“九键输入”,按其中一个数字后会出现对应的字母,要求返回所有的字母组合情况。
因此,首先需要有将数字和字母对应起来的方法,这里可以采用 字符类型 的二维数组。
注意: 按键的首个数字为
2
,对应下标为0
,需要进行下标的变换。
根据遍历到的数字,去取对应的字母,暂存入到目前的结果串中,并继续深度优先遍历,直至遍历完所有的数字后,收集最终的答案串。
递归的准备
定义递归函数的功能: 从index
下标开始按数字,最终会产生什么样的结果。
思考递归需要的参数: 数字串str
,此时来到的下标index
,在index
之前已经产生了什么结果path
,最终的答案列表ans
。
- 这里一定要记得存之前的结果(回溯后还能找到)。
明确递归的边界条件: 当下标来到最后,即等于数字字符串的长度时,结束,收集最终答案。
代码
public static char[][] phone = {
{'a', 'b', 'c'}, // 2 -> 0
{'d', 'e', 'f'}, // 3 -> 1
{'g', 'h', 'i'}, // 4 -> 2
{'j', 'k', 'l'}, // 5 -> 3
{'m', 'n', 'o'}, // 6 -> 4
{'p', 'q', 'r', 's'}, // 7 -> 5
{'t', 'u', 'v'}, // 8 -> 6
{'w', 'x', 'y', 'z'}, // 9 -> 7
};
public static List<String> letterCombinations(String digits) {
List<String> ans = new ArrayList<>();
if (digits == null || digits.length() == 0) {
return ans;
}
char[] str = digits.toCharArray();
char[] path = new char[str.length];
// 从下标 0 开始递归,即所以按键按完后的最终答案
process(str, 0, path, ans);
return ans;
}
// str[0 ... index-1],按出的结果存入 path 里
// str[index...] 按完之后,最终会产生哪些组合,放入到 ans 里
public static void process(char[] str, int index, char[] path, List<String> ans) {
if (index == str.length) {
ans.add(String.valueOf(path));
} else {
// 注意下标的变换
char[] cands = phone[str[index] - '2'];
// 遍历当前数字中的每一个字母
for (char cur : cands) {
path[index] = cur;
// 递归调用,深度优先遍历
process(str, index + 1, path, ans);
}
}
}
「力扣高频题」 系列文章 已经更新不少了,有想刷力扣的小伙伴可以 收藏下方合集 逐题开刷~~~
~ 点赞 ~ 关注 ~ 星标 ~ 不迷路 ~!!!
回复「1024」获取 Java 面试资源 ~
回复「ACM紫书」获取 ACM 算法书籍 ~
回复「算法导论」获取 算法导论第3版 ~
在看 + 转发
让你的小伙伴们一起来学算法吧!!