【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 知识点

回溯:

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

相关推荐
啥都鼓捣的小yao34 分钟前
Python解决“数字插入”问题
python·算法
qystca1 小时前
蓝桥云客--回文数组
算法
每次的天空2 小时前
Android学习总结之算法篇五(字符串)
android·学习·算法
Fantasydg2 小时前
DAY 37 leetcode 454--哈希表.四数相加
算法·leetcode·散列表
前端 贾公子2 小时前
LeetCode 2442:统计反转后的不同整数数量
算法·leetcode·职场和发展
lmy201211083 小时前
GESP:2025-3月等级8-T1-上学
c++·算法·图论·dijkstra
珊瑚里的鱼3 小时前
第五讲(下)| string类的模拟实现
开发语言·c++·笔记·程序人生·算法·visualstudio·visual studio
工一木子3 小时前
大厂算法面试 7 天冲刺:第6天-树与图深度剖析——高频算法面试题 & Java 实战
java·算法·面试
查理零世3 小时前
【蓝桥杯速成】日期问题(填空题) + 真题讲解 python
python·算法·蓝桥杯
杰克逊的日记3 小时前
大语言模型应用和训练(人工智能)
人工智能·算法·语言模型