给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:“23”
输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].
解题思路:
可以按照递归的思路解题,递归遍历每一个数值,每个数字取一个字母,拼接起来。
import com.alibaba.fastjson.JSON;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Auther: wjj
* @Date: 2020/12/7 19:50
* @Description:
*/
public class LeetCode17 {
private static List<String> resList = Lists.newArrayList();
private static Map<Character, String[]> map = new HashMap<>();
public static void main(String[] args) {
String letters = "23";
letterCombinations(letters);
System.out.printf("结果:" + JSON.toJSONString(resList));
}
static {
map.put('2', new String[]{"a", "b", "c"});
map.put('3', new String[]{"d", "e", "f"});
map.put('4', new String[]{"g", "h", "i"});
map.put('5', new String[]{"j", "k", "l"});
map.put('6', new String[]{"m", "n", "o"});
map.put('7', new String[]{"p", "q", "r", "s"});
map.put('8', new String[]{"t", "u", "v"});
map.put('9', new String[]{"w", "x", "y", "z"});
}
public static List<String> letterCombinations(String digits) {
char[] chars = digits.toCharArray();
int len = chars.length;
combine(chars, "" , len, 0);
return resList;
}
private static void combine(char[] chars, String res, int len ,int index){
if(chars.length == 0){
resList.add("");
return;
}
if(index == len){
resList.add(res);
return;
}
char key = chars[index];
String[] arr = map.get(key);
for(int i = 0; i< arr.length; i++){
combine(chars, res + arr[i], len, index + 1);
}
}
}