17. 电话号码的字母组合

23 阅读1分钟

17. 电话号码的字母组合

相关企业

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

 

示例 1:

输入: digits = "23"
输出: ["ad","ae","af","bd","be","bf","cd","ce","cf"]

示例 2:

输入: digits = "2"
输出: ["a","b","c"]

 

提示:

  • 1 <= digits.length <= 4
  • digits[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);
        }
    }
}