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

246 阅读2分钟

image.png

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。

怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~

一、题目描述:

  • 题目内容

    image.png

  • 题目示例

    image.png

  • 题目解析

    • 本题要求给定2~9数字组成的字符串
    • 要求对数字字串包含的字母进行组合
    • 返回的组合字母顺序可以是任意的。

二、思路分析:

我们拿到本题,给出的2~9数字键对应字母的电话按键,进行组合。

首先,我们会想到使用一个字典,来存储2~9数字,所对应的字母。

Map = {
  "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"]
    }

那怎么将字母进行组合呢?又是眼睛会,手不会的题。

我们先来根据示列1,“23”-〉["ad","ae","af","bd","be","bf","cd","ce","cf"]推理一下:

image.png

image.png

如上图所示,主要思路如下:

  • 首先,我们需要使用result存储组合字母,currmap存储获取Map数字映射的字母列表
  • 每当取第一个数字字母序列与第二个数字字母序列组合字母通过tmp列表传递给result存储
  • result已存在的组合字母继续与第三个数字字母序列进行组合tmp列表传递给result
  • 直到遍历完整个digits字符串,返回 result 列表

以上思路,使用的动态规划方法。

class Solution(object):
    def letterCombinations(self, digits):
        """
        :type digits: str
        :rtype: List[str]
        """
        Map = {
        "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"]
        }
        result = []
        currmap = []
        for i in range(len(digits)):

            curnum = digits[i]
            currmap = Map[curnum]

            if i == 0:

                result = currmap
                continue
            
            tmp = []
            
            for x in range(len(result)):

                for y in range(len(currmap)):

                    tmp.append(result[x]+currmap[y])
                
            result = tmp

        return result

三、总结:

我们提交代码,AC记录如下: image.png 时间复杂度O(n^2),空间复杂度O(n)

本题难点在于组合细节过程要想清楚。

以上是本期内容,欢迎大佬们点赞评论,下期见~~~