版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
题目:
给出一个数字字符串,返回这个数字字符串能表示的所有字母组合。
输入:
字符串数组23
输出:
["ad","ae","af","bd","be","bf","cd","ce","cf"]
思路:
采用递归的方法。
代码如下:
package com.haobi;
import java.util.ArrayList;
import java.util.List;
public class LetterCombinationOfPhoneNumber {
static String[] LetterMap = {
" ", //0
"", //1
"abc", //2
"def", //3
"ghi", //4
"jkl", //5
"mno", //6
"pqrs", //7
"tuv", //8
"wxyz" //9
};
static List<String> res = new ArrayList<>();
public static void main(String[] args) {
String s = "23";
List<String> list = LetterCombination(s);
for(String str : list) {
System.out.print(str+" ");
}
}
/**
* 寻找和digits[index]匹配的字母,获得digits[0...index]翻译得到的解
* @param digits 输入的数字字符串
* @param index 当前的位置
* @param s 当前的结果字符串,s中保存了此时从digits[0...index-1]翻译得到的一个字母字符串
*/
private static void findCombination(String digits, int index, String s) {
if(index == digits.length()) {
//保存s
res.add(s);
return;
}
//获取当前idex所对应的数字
char c = digits.charAt(index);
//获取数字所对应的字符串
String letters = LetterMap[c-'0'];
char[] letter = letters.toCharArray();
for(int i=0;i<letter.length;i++) {
//递归(向后逐位生成所有可能的字符串)
findCombination(digits, index+1, s + letter[i]);
}
return;
}
/**
*
* @param digits 输入的数字字符串
* @return String[] 输出的所有可能的字符串数组
*/
public static List<String> LetterCombination(String digits) {
res.clear();
findCombination(digits, 0, "");
return res;
}
}
程序输出结果如下:
ad ae af bd be bf cd ce cf