# 电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

示例 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'] 的一个数字。
## template
```java
class Solution {
public List letterCombinations(String digits) {
Character[][] letters = { {}, {}, { 'a', 'b', 'c' }, { 'd', 'e', 'f' }, { 'g', 'h', 'i' }, { 'j', 'k', 'l' },
{ 'm', 'n', 'o' }, { 'p', 'q', 'r', 's' }, { 't', 'u', 'v' }, { 'w', 'x', 'y', 'z' }, };
List> combinations = new ArrayList<>();
for (int i = 0; i < digits.length(); i++) {
Character d = digits.charAt(i);
int index = Character.getNumericValue(d);
Character[] letter = letters[index];
System.out.println(d);
if (i == 0) {
for (int j = 0; j < letter.length; j++) {
List c = new ArrayList<>();
c.add(letter[j]);
combinations.add(c);
}
} else {
List> added = new ArrayList<>();
for (int j = 0; j < combinations.size(); j++) {
List c = combinations.get(j);
List origin_c = new ArrayList<>(c);
for (int k = 0; k < letter.length; k++) {
Character l = letter[k];
if (k == 0) {
c.add(l);
} else {
List new_c = new ArrayList<>(origin_c);
new_c.add(l);
added.add(new_c);
}
}
}
combinations.addAll(added);
}
}
List output = new ArrayList<>();
for (int i = 0; i < combinations.size(); i++) {
List c = combinations.get(i);
StringBuilder sb = new StringBuilder();
for (Character l : c) {
sb.append(l);
}
output.add(sb.toString());
}
return output;
}
}
```
## 答案
```java
```
## 选项
### A
```java
```
### B
```java
```
### C
```java
```