电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。
思路+注释+代码:
class Solution {
public List<String> letterCombinations(String digits) {
/*
用递归解决该问题,求数字串中所有数字对应字符的组合方式,可以分解为求第一个数字对应
的字符串和余下数字组成的字符串的组合
递归终止条件是当前数字是最后一个数字
*/
//代表当前求到第几个数字了
String[][] numberList = new String[][]{
{"a", "b", "c"},
{"d", "e", "f"},
{"g", "h", "i"},
{"j", "k", "l"},
{"m", "n", "o"},
{"p", "q", "r", "s"},
{"t", "u", "v"},
{"w", "x", "y", "z"},
};
List<String> result=new ArrayList<>();
if (0==digits.length())
{
return result;
}
String[] firstStr=numberList[digits.charAt(0)-48-2];
if (digits.length()==1)
{
result.addAll(Arrays.asList(firstStr));
return result;
}
List<String> shengStr=letterCombinations(digits.substring(1));
for (String s:firstStr) {
for (String sheng:shengStr
) {
result.add(s+sheng);
}
}
return result;
}
}