【LeetCode】17. 电话号码的字母组合

1 问题

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

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

示例 1:

输入:digits = "23"

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

示例 2:

输入:digits = ""

输出:[]

示例 3:

输入:digits = "2"

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

2 答案

自己写的不对

python 复制代码
class Solution:
    def letterCombinations(self, digits: str) -> List[str]:
        hashmap = {2:'abc', 3:'def', 4:'ghi', 5:'jkl', 6:'mno', 7:'pqrs', 8:'tuv', 9:'wxyz'}
        if digits = "" return []
        list1 = []
        res = []
        for s in digits:
            list1.append(hashmap[int(s)])
        for i in range(len(list1)):
            for j in range(i+1, len(list1)):

                ii = len(list1[i])
                jj = len(list1[j])
                while ii != -1: 
                    
                    res.append(list1[i][ii]+list1[j][jj])
                    ii -= 1

官方解1:回溯

python 复制代码
class Solution:
    def letterCombinations(self, digits: str) -> List[str]:
        if not digits: return []

        phone = {'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']}
                
        def backtrack(conbination,nextdigit):
            if len(nextdigit) == 0:
                res.append(conbination)
            else:
                for letter in phone[nextdigit[0]]:
                    backtrack(conbination + letter,nextdigit[1:])

        res = []
        backtrack('',digits)
        return res

官方解2:队列

python 复制代码
class Solution:
    def letterCombinations(self, digits: str) -> List[str]:
        if not digits: return []
        phone = ['abc','def','ghi','jkl','mno','pqrs','tuv','wxyz']
        queue = ['']  
        for digit in digits:
            for _ in range(len(queue)):
                tmp = queue.pop(0)
                for letter in phone[ord(digit)-50]:
                    queue.append(tmp + letter)
        return queue

感觉这两种方法都不太好理解,后面还要巩固一下

3 知识点

回溯:

当题目中出现 "所有组合" 等类似字眼时,我们第一感觉就要想到用回溯。

相关推荐
roman_日积跬步-终至千里几秒前
【模式识别与机器学习(7)】主要算法与技术(下篇:高级模型与集成方法)之 扩展线性模型(Extending Linear Models)
人工智能·算法·机器学习
做怪小疯子几秒前
LeetCode 热题 100——二叉树——二叉树的最大深度
算法·leetcode·职场和发展
Maỿbe9 分钟前
暴打力扣之优先级队列(堆)
算法·leetcode·职场和发展
Swift社区10 分钟前
LeetCode 438 - 找到字符串中所有字母异位词
算法·leetcode·职场和发展
北冥湖畔的燕雀16 分钟前
二叉搜索树:高效查找与删除的实现
数据结构·c++·算法
学学学无无止境16 分钟前
力扣-位1的个数
leetcode
别学LeetCode18 分钟前
#leetcode# 1
leetcode
兩尛19 分钟前
矩阵中非1的数量 (2025B卷
线性代数·算法·矩阵
kupeThinkPoem21 分钟前
线段树有哪些算法?
数据结构·算法
sheeta199822 分钟前
LeetCode 每日一题笔记 日期:2025.11.30 题目:1590.使数组和能被 P 整除
笔记·算法·leetcode