当前位置: 面试刷题>> 电话号码的字母组合(经典算法150题)


### 题目描述 给定一个仅包含数字 2-9 的字符串,返回所有可能的字母组合。映射关系如下: - 数字 2 映射到字母 "abc" - 数字 3 映射到字母 "def" - 数字 4 映射到字母 "ghi" - 数字 5 映射到字母 "jkl" - 数字 6 映射到字母 "mno" - 数字 7 映射到字母 "pqrs" - 数字 8 映射到字母 "tuv" - 数字 9 映射到字母 "wxyz" 注意:你可以假设输入字符串不包含除数字 2-9 之外的字符。 ### 示例 输入:`"23"` 输出:`["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]` ### PHP 示例代码 ```php function letterCombinations($digits) { if (empty($digits)) return []; $map = [ '2' => 'abc', '3' => 'def', '4' => 'ghi', '5' => 'jkl', '6' => 'mno', '7' => 'pqrs', '8' => 'tuv', '9' => 'wxyz' ]; $result = []; backtrack($digits, $map, '', $result); return $result; } function backtrack($digits, $map, $current, &$result) { if (empty($digits)) { $result[] = $current; return; } $digit = $digits[0]; $letters = $map[$digit]; for ($i = 0; $i < strlen($letters); $i++) { backtrack(substr($digits, 1), $map, $current . $letters[$i], $result); } } // 示例用法 $digits = "23"; $combinations = letterCombinations($digits); print_r($combinations); ``` ### Python 示例代码 ```python def letterCombinations(digits): if not digits: return [] mapping = { '2': 'abc', '3': 'def', '4': 'ghi', '5': 'jkl', '6': 'mno', '7': 'pqrs', '8': 'tuv', '9': 'wxyz' } def backtrack(index, current): if index == len(digits): result.append(current) return letters = mapping[digits[index]] for letter in letters: backtrack(index + 1, current + letter) result = [] backtrack(0, '') return result # 示例用法 digits = "23" combinations = letterCombinations(digits) print(combinations) ``` ### JavaScript 示例代码 ```javascript function letterCombinations(digits) { if (!digits) return []; const map = { '2': 'abc', '3': 'def', '4': 'ghi', '5': 'jkl', '6': 'mno', '7': 'pqrs', '8': 'tuv', '9': 'wxyz' }; const result = []; function backtrack(index, current) { if (index === digits.length) { result.push(current); return; } const letters = map[digits[index]]; for (let letter of letters) { backtrack(index + 1, current + letter); } } backtrack(0, ''); return result; } // 示例用法 const digits = "23"; const combinations = letterCombinations(digits); console.log(combinations); ``` 在以上示例中,我们使用了回溯算法来生成所有可能的字母组合。每个数字对应的字母集合被逐一添加到当前组合的末尾,并递归地处理剩余的数字。通过这种方式,我们可以得到所有可能的组合。
推荐面试题