1.题目:
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
来源:力扣(LeetCode)
链接:原题
class Solution {
public List<String> letterCombinations(String digits) {
HashMap<String, String> hashMap = new HashMap<>();
hashMap.put("2", "abc");
hashMap.put("3", "def");
hashMap.put("4", "ghi");
hashMap.put("5", "jkl");
hashMap.put("6", "mno");
hashMap.put("7", "pqrs");
hashMap.put("8", "tuv");
hashMap.put("9", "wxyz");
if (digits.length() == 0) {
return new ArrayList<>();
}
if (digits.length() == 1) {
return Arrays.asList(hashMap.get(digits).split(""));
}
List<List<String>> listList = new ArrayList<>();
for (int i = 0; i < digits.length(); i++) {
List<String> list1 = Arrays.asList(hashMap.get(String.valueOf(digits.charAt(i))).split(""));
listList.add(list1);
}
List<String> stringList = listList.get(0);
for (int i = 1; i < listList.size(); i++) {
stringList = descartes(stringList, listList.get(i));
}
return stringList;
}
public List<String> descartes(List<String>... lists) {
List<String> tempList = new ArrayList<>();
for (List<String> list : lists) {
if (tempList.isEmpty()) {
tempList = list;
} else {
tempList = tempList.stream().flatMap(item -> list.stream().map(item2 -> item + "" + item2)).collect(Collectors.toList());
}
}
return tempList;
}
}