17.电话号码的字母组合

2024/3/12

# Heading

    17.电话号码的字母组合 (opens new window)

    Tags: algorithms amazon dropbox facebook google uber string backtracking

    Langs: c cpp csharp dart elixir erlang golang java javascript kotlin php python python3 racket ruby rust scala swift typescript

    • algorithms
    • Medium (59.18%)
    • Likes: 2775
    • Dislikes: -
    • Total Accepted: 830.9K
    • Total Submissions: 1.4M
    • Testcase Example: '"23"'

    给定一个仅包含数字 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'] 的一个数字。
    /*
     * @lc app=leetcode.cn id=17 lang=javascript
     *
     * [17] 电话号码的字母组合
     * 递归
     */
    
    // @lc code=start
    /**
     * @param {string} digits
     * @return {string[]}
     */
    var letterCombinations = function(digits) {
        if (digits === '') {
            return []
        }
        const map = {
            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'],
        }
    
        if (digits.length === 1) {
            return map[digits[0]]
        } else {
            const subResult = letterCombinations(digits.slice(0, digits.length - 1))
    
            const lastLetterMap = map[digits[digits.length - 1]]
            return subResult.reduce((acc, item) => {
                for (let lastLetter of lastLetterMap) {
                    acc.push(`${item}${lastLetter}`)
                }
                return acc
            }, [])
        }
    }
    // @lc code=end
    
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    /*
     * @lc app=leetcode.cn id=17 lang=javascript
     *
     * [17] 电话号码的字母组合
     * 非递归
     */
    
    // @lc code=start
    /**
     * @param {string} digits
     * @return {string[]}
     */
    var letterCombinations = function(digits) {
        if (digits === '') {
            return []
        }
        const map = {
            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'],
        }
    
        let result = map[digits[0]]
    
        for (let i = 1; i < digits.length; i++) {
            const lastLetterMap = map[digits[i]]
    
            result = result.reduce((acc, item) => {
                for (let lastLetter of lastLetterMap) {
                    acc.push(`${item}${lastLetter}`)
                }
                return acc
            }, [])
        }
    
        return result
    }
    // @lc code=end
    
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43