17. 电话号码的字母组合
- 1)题目
- 2)思路
- 3)代码
- 4)结果
1)题目
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
1 2 abc 3 def
4 ghi 5 jkl 6 mno
7 pqrs 8 tuv 9 wxyz
示例 1:
输入:digits = “23”
输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]
示例 2:
输入:digits = “”
输出:[]
示例 3:
输入:digits = “2”
输出:[“a”,“b”,“c”]
提示:
- 0 <= digits.length <= 4
- digits[i] 是范围 [‘2’, ‘9’] 的一个数字。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/letter-combinations-of-a-phone-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2)思路
两个数字的字符先进行拼接,其结果再与第三个数字的字符拼接。
3)代码
public static List<String> letterCombinations(String digits) {
if (digits.trim().length() == 0) return new ArrayList<>();
// 2,3,4,5,6,7,8,9
String chars[]={"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
// char字符的‘2’是50,‘3’是51,...
String str = chars[digits.charAt(0) - 50];
List<String> result = Arrays.asList(str.split(""));
for (int i = 1; i < digits.length(); i++) {
String str1 = chars[digits.charAt(i) - 50];
result = joint(result, str1.split(""));
}
return result;
}
private static List<String> joint(List<String> strList, String[] strs) {
List<String> list = new ArrayList<>();
for (int i = 0; i < strList.size(); i++) {
for (int j = 0; j < strs.length; j++) {
list.add(strList.get(i)+strs[j]);
}
}
return list;
}