017.电话号码的字母组合——技术派-二哥的 LeetCode 刷题笔记
题意
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
难度
中等
示例
输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
输入:digits = ""
输出:[]
输入:digits = "2"
输出:["a","b","c"]
分析 1
这道题对于新手来说,可能第一时间会比较难消化,但耐着性子思考一下,思路就很清晰了。
比如说 2 对应的是 abc,3 对应的是 def,那么 23 对应的就是 ad、ae、af、bd、be、bf、cd、ce、cf。
也就是一个排列组合。
那我们的思路如下:
①、建立一个数字到字母的映射,比如 2 对应的是 abc,3 对应的是 def,我们用数组来就可以。
// 数字到字母的映射
String[] mapping = {"0", "1", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
0 和 1 属于占位符,没有对应的字母,因为输入的字符串只包含 2-9 的数字。
②、建立一个队列,我们用LinkedList来实现,初始时队列中只有一个空字符串。
LinkedList<String> combinations = new LinkedList<>();
combinations.add(""); // 初始添加一个空字符串到队列中
空字符串是为了方便后续的处理,否则下面这两个方法就没办法直接使用,要判空,很麻烦。
combinations.pe
真诚点赞 诚不我欺
回复