九键输入组合与四数之和——LeetCode 16、17 题记

同样是两道中等难度题目,但题目间没啥关联:第一道类似于我们之前按键手机时代九键输入组合的展示,第二道题将昨天的三数之和改造成了四数之和。现在做题,有时候做着做着提交通过了,就不愿深挖了,挺偷懒的,希望写题记时可以多拓展学习下。

题目一

第 17 题 电话号码的字母组合:

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。

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

九键组合

示例:

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

好吧,数字 1 键还没内容,叫它八键组合得了。

思路

首先是数字转字母的过程:我们输入 “23” 那么要先取到 “2” 对应的 “abc” 和 “3” 对应的 “def”。然后我们将二者拆分组合得到结果。

数字转字母这个过程,吸取之前题目中的经验,事先写好一个不同数字对应不同字母的字典,一来哈希字典方便快速查找,二来也省的代码提取麻烦。

将字母串拆分组合这步,没想到特别好的方法,我是先把 “abc” 转化成单字母列表,遍历 “def” 每一步都在之前的列表所有元素尾加上新遍历的字母,不断扩充列表拿到结果,细节我们看代码。

代码

class Solution:
    def letterCombinations(self, digits: str) -> List[str]:
        # 如果输入空字符串,返回空列表
        if digits=="":
            return []
        # 用字典存好数字与字母的对应关系
        table = {
   "2":"abc","3":"def","4":"ghi","5":"jkl","6":"mno","7":"pqrs","8":"tuv","9":"wxyz"}
        # digits[0] 即输入字符串的第一位数字,table[该数字]取到对应字母串,转成列表
        lst = list(table[digits[0]])
        # 获取输入数字串长度用于遍历
        l = len(digits)
        i=1
        # while 循环对每一位数字进行一次处理
        while i<l:
        	# temp_sum 列表用与循环中保存生成的结果
            temp_sum=
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值