Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。
怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~
一、题目描述:
-
题目内容
-
题目示例
-
题目解析
- 本题要求给定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"]推理一下:
如上图所示,主要思路如下:
- 首先,我们需要使用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记录如下:
时间复杂度O(n^2),空间复杂度O(n)
本题难点在于组合细节过程要想清楚。
以上是本期内容,欢迎大佬们点赞评论,下期见~~~