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

示例 1:
| 12
 
 | 输入:digits = "23"输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
 
 | 
示例 2:
示例 3:
| 12
 
 | 输入:digits = "2"输出:["a","b","c"]
 
 | 
提示:
- 0 <= digits.length <= 4
- digits[i]是范围- ['2', '9']的一个数字。

递归的深度是输入字符串的长度
横向遍历是每个数字对应的字符串
代码
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 
 | class Solution {List<String> ans = new ArrayList<>();
 String[] map = {"","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
 StringBuilder sb = new StringBuilder();
 public List<String> letterCombinations(String digits) {
 traversal(digits, 0);
 return ans;
 
 }
 
 public void traversal(String digits, int index){
 if(index == digits.length()){
 if(sb.length() != 0){
 ans.add(sb.toString());
 }
 return;
 }
 String letter = map[digits.charAt(index) - '0' - 1];
 for(int i = 0; i < letter.length(); i++){
 sb.append(letter.charAt(i));
 traversal(digits, index+1);
 sb.deleteCharAt(sb.length()-1);
 }
 }
 }
 
 | 
- 时间复杂度: $O(3^m * 4^n)$,其中 m 是对应四个字母的数字个数,n 是对应三个字母的数字个数
- 空间复杂度: $O(m+n)$,m+n是输入数字的总个数