【Leetcode刷题】17. 电话号码的字母组合

题目

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

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

 

示例1

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

 示例2

输入:digits = ""
输出:[]

 示例3

输入:digits = "2"
输出:["a","b","c"]

提示

(1)0 <= digits.length <= 4

(2)digits[i] 是范围 ['2', '9'] 的一个数字。

解题思路

(1)构造phoneMap字典,对应拼音与数字的相互关系

(2)该问题可以转换为一个穷举所有输入数字对应元素之间相互匹配的问题

(3)分别将最后一个数字的每种情况存储在combination,用join进行拼接

(4)用pop函数对最后一位元素进行移除,for函数继续添加新的元素

(5)最后一级的所有情况都列举完后回溯到上一层,继续for函数进行遍历

(6)直到所有情况都被遍历,将最后结果存进combinations

代码

class Solution:
    def letterCombinations(self, digits: str) -> List[str]:
        if not digits:
            return list()
        
        phoneMap = {
            "2": "abc",
            "3": "def",
            "4": "ghi",
            "5": "jkl",
            "6": "mno",
            "7": "pqrs",
            "8": "tuv",
            "9": "wxyz",
        }

        def backtrack(index: int):
            if index == len(digits):
                combinations.append("".join(combination))
            else:
                digit = digits[index]
                for letter in phoneMap[digit]:
                    combination.append(letter)
                    backtrack(index + 1)
                    combination.pop()

        combination = list()
        combinations = list()
        backtrack(0)
        return combinations

Reference

题库 - 力扣 (LeetCode) 全球极客挚爱的技术成长平台

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

202xxx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值