Typescript-Algorithms
    Preparing search index...

    Variable letter_combinations_of_a_phone_numberConst

    letter_combinations_of_a_phone_number: (digits: string) => string[] = letterCombinations

    17.电话号码的字母组合

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

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

    数字 对应字母
    2 a, b, c
    3 d, e, f
    4 g, h, i
    5 j, k, l
    6 m, n, o
    7 p, q, r, s
    8 t, u, v
    9 w, x, y, z

    输入: digits = "23"

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


    输入: digits = ""

    输出: []


    输入: digits = "2"

    输出: ["a","b","c"]


    • 0 <= digits.length <= 4
    • digits[i] 是范围 ['2', '9'] 的一个数字

    Type declaration

      • (digits: string): string[]
      • Parameters

        • digits: string

        Returns string[]

    如果我们把digits转换成对应字母后。实际上题目求的就是从每个字母中选一个字母,然后组合成一个字符串。 这道题是一道组合型回溯题。

    用一个path数组记录递归路径上枚举的字母。

    回溯三问**

    • 当前操作?枚举path[i]要填入的字母
    • 子问题?构造字符串>=i的部分
    • 下一个子问题?构造字符串>=i+1的部分 dfs(i) → dfs(i+1),递归参数的i的含义是对于>=i的这部分我们还需要枚举。
    function letterCombinations(digits: string): string[] {
    if (digits.length === 0) {
    return [];
    }

    const mapping = ['', '', 'abc', 'def', 'ghi', 'jkl', 'mno', 'pqrs', 'tuv', 'wxyz'];
    const path: string[] = [];
    const ans: string[] = [];

    function dfs(i: number) {
    if (i === digits.length) {
    ans.push(path.join(''));
    return;
    }

    const letters = mapping[+digits[i]];

    for (const c of letters) {
    path[i] = c;
    // 既然枚举完path[i]了,接下来要枚举path[i+1]
    dfs(i + 1);
    }
    }

    dfs(0);

    return ans;
    };