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

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

递归的深度是输入字符串的长度
横向遍历是每个数字对应的字符串
代码
1 2 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是输入数字的总个数