给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例 1:
输入: digits = "23"
输出: ["ad","ae","af","bd","be","bf","cd","ce","cf"]
示例 2:
输入: digits = "2"
输出: ["a","b","c"]
提示:
1 <= digits.length <= 4digits[i]是范围['2', '9']的一个数字。
解题答案
class Solution {
private final char[][] letterArray = {
{'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'},
};
private char[] chars;
private char[] string;
private List<String> result;
public List<String> letterCombinations(String digits) {
chars = digits.toCharArray();
string = new char[chars.length];
result = new ArrayList<>();
dfs(0);
return result;
}
private void dfs(int idx) {
if (idx == chars.length) { // 保存结果
result.add(new String(string));
return;
}
char[] letters = letterArray[chars[idx] - '2'];
for (char letter : letters) {
string[idx] = letter;
dfs(idx+1);
}
}
}