leetcode-电话号码的字母组合

题目描述

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

输入输出

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

算法思想-回溯

  1. 使用哈希表存储每个数字对应的所有可能的字母,然后进行回溯操作
  2. 回溯过程中维护一个字符串,表示已有的字母排列,该字符串初始为空。每次取电话号码的一位数字,从哈希表中获得该数字对应的所有可能的字母,并将其中的一个字母插入到已有的字母排列后面,然后继续处理电话号码的后一位数字,直到处理完电话号码中的所有数字,即得到一个完整的字母排列。
  3. 然后进行回退操作,遍历其余的字母排列
    image

代码实现

class Solution:
    def letterCombinations(self, digits: str) -> List[str]:
        if not digits:
            return []
        phoneMap = {
            "2":"abc",
            "3":"def",
            "4":"ghi",
            "5":"jkl",
            "6":"mno",
            "7":"pqrs",
            "8":"tuv",
            "9":"wxyz",
        }
        n = len(digits)
        ans = []
        tmp = []
        def backtrack(index):
            if index==n:
                ans.append("".join(tmp))
            else:
                digit = digits[index]
                for letter in phoneMap[digit]:
                    tmp.append(letter)
                    backtrack(index+1)
                    tmp.pop()
        
        backtrack(0)
        return ans 

posted @ 2022-03-07 16:48  topbookcc  阅读(33)  评论(0编辑  收藏  举报
/* 鼠标点击求赞文字特效 */