题目描述
题目描述:
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
解题思路
递归循环调用,每次获取输入字符串的第一个字符,遍历该字符【按键】对应的所有字符进行拼接。
递归截至条件为:输入的字符串被截完,也就是需要按的 按键 按完
代码示例
public class Test {
//存储最终结果
private static List<String> list = new ArrayList<>();
//保存手机按键,数组的索引代表键位数,内容则为按键对应的数组
private static final String[] KEY_STR = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
public static void main(String[] args) {
String numStr = "23";
letterCombinations(numStr);
System.out.println("结果为:" + list);
}
private static void letterCombinations(String numStr) {
callbackMethod("", numStr);
}
private static void callbackMethod(String s, String numStr) {
if ("".equals(numStr)){
list.add(s);
}else {
//记录当前遍历到的数【按键】
int currNum = Integer.parseInt(numStr.substring(0, 1));
//该按键对应的所有字符
String keyCurrStr = KEY_STR[currNum];
char[] keyCurrChars = keyCurrStr.toCharArray();
//遍历该按键的字符
for (int i=0; i<keyCurrStr.length(); i++){
callbackMethod(s + keyCurrChars[i], numStr.substring(1));
}
}
}
}
运行结果
▄█▀█●各位同仁,如果我的代码对你有帮助,请给我一个赞吧,为了下次方便找到,也可关注加收藏呀
如果有什么意见或建议,也可留言区讨论