17. 电话号码的字母组合(中)

题目

题解:回溯

JavaScript

var letterCombinations = function(digits) {
    if (digits.length == 0) return []
    const res = []
    // 数字到字母的映射
    const map={'2': 'abc', '3': 'def', '4': 'ghi', '5': 'jkl', '6': 'mno', '7': 'pqrs', '8': 'tuv', '9': 'wxyz' }
    const dfs=(cur_str,next_digits)=>{ //cur_str指当前字母组合, next_digits指剩余的字符串
        //递归出口,如果没有剩余的数字,说明当前组合完成,添加到结果中
        if(next_digits.length == 0){
            res.push(cur_str)
            return
        }
        
        const letters = map[next_digits[0]]//取next_digits第一个元素,在map中找到对于的字符串
        for(const letter of letters){
            cur_str += letter //做选择,添加当前字母到组合中
            dfs(cur_str, next_digits.slice(1))// 递归调用,处理剩余的数字(从next_digits的第二位开始)
            cur_str = cur_str.slice(0,-1)// 撤销选择,去掉组合中的最后一个字母
        }
    }
    dfs('',digits)// 从空字符串和输入的数字开始进行深度优先搜索
    return res
};

python

class Solution:
    def letterCombinations(self, digits: str) -> List[str]:
        if not digits:#检查输入的数字串 digits 是否为空
            return []
        a = {"2": "abc", "3": "def", "4": "ghi", "5": "jkl", "6": "mno", "7": "pqrs", "8": "tuv", "9": "wxyz"}#定义字典 a,其中键为数字字符,值为对应的字母字符串
        def backtrack(combination, next_digits):#combination 表示当前的字母组合,next_digits 表示剩余的数字串。
            if len(next_digits) == 0:#若剩余的数字串为空,说明已经生成了一个完整的组合,将其添加到结果列表 result 中。
                result.append(combination)  # 将当前组合添加到结果列表中
            else:#如果剩余的数字串不为空
                current_digit = next_digits[0]#取出剩余数字串的第一个数字
                letters = a[current_digit]  # 通过字典 a 获取当前数字对应的字母字符串
                for letter in letters:
                    combination += letter#将当前字母 letter 添加到当前组合 combination 中
                    backtrack(combination, next_digits[1:])#递归调用 backtrack 函数,传入更新后的参数 combination 和去掉第一个数字的剩余数字串 next_digits[1:]
                    combination = combination[:-1]  #撤销选择,回溯到上一层,恢复状态,去除最后一个字母
        result = []
        backtrack("", digits)  # 初始调用回溯函数,传入空字符串和输入的数字串
        return result
posted @   Frommoon  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示