题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例.png示例:
输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。
Java代码:
class Solution {
public List<String> letterCombinations(String digits) {
if(digits == null || digits.length() == 0)
return new ArrayList();
if(digits.length() == 1){
//仅有一位时
return getList(digits.charAt(0));
}
int i = 0;
List<String> ans = null;
while(i < digits.length()){
char c = digits.charAt(i);
List<String> leftList = getList(c);
if(i == 0){
ans = merge(leftList,getList(digits.charAt(i+1)));
}else if(i != digits.length() -1 ){
ans = merge(ans,getList(digits.charAt(i+1)));
}
i++;
}
return ans;
}
private List<String> getList(char c){
List<String> ans = null;
switch(c){
case '2':
ans = Arrays.asList("a","b","c");
break;
case '3':
ans = Arrays.asList("d","e","f");
break;
case '4':
ans = Arrays.asList("g","h","i");
break;
case '5':
ans = Arrays.asList("j","k","l");
break;
case '6':
ans = Arrays.asList("m","n","o");
break;
case '7':
ans = Arrays.asList("p","q","r","s");
break;
case '8':
ans = Arrays.asList("t","u","v");
break;
case '9':
ans = Arrays.asList("w","x","y","z");
break;
}
return ans;
}
private List<String> merge(List<String> left,List<String> right){
if(right == null)
return left;
List<String> newList = new ArrayList<>();
for(String l : left){
for(String r : right){
newList.add(l+r);
}
}
return newList;
}
}
网友评论