leetcode17 Letter Combinations of a Phone Number
# 17. 电话号码的字母组合 (opens new window)
English Version (opens new window)
# 题目描述
给定一个仅包含数字 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']
的一个数字。
# 解法
# Python3
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
n = len(digits)
if n == 0:
return []
chars = ['abc', 'def', 'ghi', 'jkl', 'mno', 'pqrs', 'tuv', 'wxyz']
strs = [chars[int(d) - 2] for d in digits]
res = []
for s in strs:
if not res:
res = list(s)
else:
cache = []
for item in res:
for letter in s:
cache.append(item + letter)
res = cache
return res
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Java
class Solution {
public List<String> letterCombinations(String digits) {
int n;
if ((n = digits.length()) == 0) return Collections.emptyList();
List<String> chars = Arrays.asList("abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz");
List<String> strs = new ArrayList<>();
for (char c : digits.toCharArray()) {
strs.add(chars.get(c - '0' - 2));
}
List<String> res = new ArrayList<>();
for (String str : strs) {
if (res.size() == 0) {
for (char c : str.toCharArray()) {
res.add(String.valueOf(c));
}
} else {
List<String> cache = new ArrayList<>();
for (String item : res) {
for (char c : str.toCharArray()) {
cache.add(item + String.valueOf(c));
}
}
res = cache;
}
}
return res;
}
}
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
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# ...
1
编辑 (opens new window)
上次更新: 2021/10/30, 12:58:38