首页 > 编程语言 >day25 代码随想录算法训练营 17. 电话号码的字母组合

day25 代码随想录算法训练营 17. 电话号码的字母组合

时间:2024-01-27 22:47:34浏览次数:27  
标签:digits index 17 res self 随想录 len 字母组合 path

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

我的感悟:

  • 一时间没理解没关系,只要不放弃,就会成长!!!

理解难点:

  • index是独立集合的起点,需要理解它。
  • 有些东西就是时间的积累

代码难点:

代码示例:

class Solution:
    def __init__(self):
        self.letterMap = [
                "",  # 0
                "",  # 1
                "abc",  # 2
                "def",  # 3
                "ghi",  # 4
                "jkl",  # 5
                "mno",  # 6
                "pqrs",  # 7
                "tuv",  # 8
                "wxyz"  # 9
            ]
    def letterCombinations(self, digits: str) -> List[str]:
        if len(digits)==0:
            return []
        res = []
        self.backtracking(digits,0,[],res)
        return res
    
    def backtracking(self,digits,index,path,res):
        if len(path) == len(digits):
            res.append("".join(path))
            return
        wight = self.letterMap[int(digits[index])] 
        for i in range(len(wight)):
            path.append(wight[i])
            self.backtracking(digits,index+1,path,res)
            path.pop()

补充注释:

class Solution:
    def __init__(self):
        self.letterMap = [
            "",  # 0
            "",  # 1
            "abc",  # 2
            "def",  # 3
            "ghi",  # 4
            "jkl",  # 5
            "mno",  # 6
            "pqrs",  # 7
            "tuv",  # 8
            "wxyz"  # 9
        ]

    def letterCombinations(self, digits: str) -> List[str]:
        # 对特殊做处理
        if len(digits) == 0:
            return []
        # 正常走回溯法
        res = []
        self.backtracking(digits, 0, [], res)
        return res

    def backtracking(self, digits, index, path, res):
        # 1.深度达到要求就跳出循环
        if len(path) == len(digits):
            res.append("".join(path))
            return
        # 2.宽度 . 横向遍历
        wight = self.letterMap[int(digits[index])]  # 宽度,是指每个小集合的宽度 "abc"的宽度,... "wxyz"的宽度
        for i in range(len(wight)):
            path.append(wight[i])
            self.backtracking(digits, index + 1, path, res)  # 这里的index是独立集合的index
            path.pop()

通过截图:

扩展写法:

资料:

题目链接/文章讲解:https://programmercarl.com/0017.%E7%94%B5%E8%AF%9D%E5%8F%B7%E7%A0%81%E7%9A%84%E5%AD%97%E6%AF%8D%E7%BB%84%E5%90%88.html

视频讲解:https://www.bilibili.com/video/BV1yV4y1V7Ug

标签:digits,index,17,res,self,随想录,len,字母组合,path
From: https://www.cnblogs.com/liqi175/p/17992291

相关文章

  • 代码随想录算法训练营第四天| 24. 两两交换链表中的节点 19.删除链表的倒数第N个节
    24.两两交换链表中的节点给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。题目链接:24.两两交换链表中的节点-力扣(LeetCode)建议画图,会更清晰一些。同时注意交换问题要用两个临时节点。class......
  • CF1174E Ehab and the Expected GCD Problem
    EhabandtheExpectedGCDProblemLuoguCF1174E题目描述\(p\)是一个排列,定义\(f(p)\):设\(g_i\)为\(p_1,p_2,\cdots,p_i\)的最大公因数(即前缀最大公因数),则\(f(p)\)为\(g_1,g_2,\cdots,g_n\)中不同的数的个数。设\(f_{max}(n)\)为\(1,2,\cdots,n\)的所有排......
  • 详解'unicodeescape' codec can't decode bytes in position 16-17: malformed \N ch
    详解'unicodeescape'codeccan'tdecodebytesinposition16-17:malformed\Ncharacterescape在Python的字符串处理中,有时候可能会遇到如下错误信息:'unicodeescape'codeccan'tdecodebytesinposition16-17:malformed\Ncharacterescape。本篇文章将详细解释这个错......
  • 代码随想录 day32 买卖股票的最佳时机 II 跳跃游戏 跳跃游戏 II
    买卖股票的最佳时机II代码非常简单但是想不到思路就比较难这里是这样的逻辑若在d4卖出d1买入获得收益那么实际可以拆解成d4-d3+d3-d2+d2-d1也就是d4-d1实际就是变成看明天减去今天收益是不是大于0就行亏钱就不要赚钱就要跳跃游戏一步步跟着跳就是看......
  • 洛谷 P1749 [入门赛 #19] 分饼干 II 题解
    题目传送门先给结论:记\(S=1+2+\dots+k\),则当\(N\geS\)时为YES,当\(N<S\)时为NO。严谨一点,证明如下:若能成功分配饼干,记\(k\)名小朋友拿到的饼干数量分别为\(a_1,a_2,\dots,a_k\)。由于饼干数量各不相同且均为整数,不妨设\(a_1<a_2<\dots<a_k\),则\(a_2\gea_1+1,a_3\g......
  • SpringBoot启动项目报错:java.lang.UnsatisfiedLinkError: D:\files\software\jdk-1
    目录问题描述解决方法:问题描述在运行向的时候出现报错:java.lang.UnsatisfiedLinkError:D:\files\software\jdk-15.0.1\jdk-17.0.3.1\bin\tcnative-1.dll:Can'tloadIA32-bit.dllonaAMD64-bitplatform atjava.base/jdk.internal.loader.NativeLibraries.load(Native......
  • 洛谷题单指南-排序-P1177 【模板】排序
    原题链接:https://www.luogu.com.cn/problem/P1177题意解读:数据量为100000,必须用小于等于N*logN复杂度的排序算法,可以直接用sort,更重要需要掌握快速排序的过程。知识点:快速排序设定数组q[n],l,r第一步:确定分界点x可以取q[l]、q[(l+r)/2]、q[r]三种第二步:调整区间把<=x的数调......
  • HDU 1175 连连看 (DFS)
    HDU1175连连看(DFS)题目:给出连连看棋盘,然后有q次询问,每次询问4个数(x1,y1,x2,y2),输出是否能不绕外面且转折不超过两次消除,输出YES/NOSampleInput34123400004321411341124113321243401430241000021124132300Sampl......
  • [ARC170C] Prefix Mex Sequence
    给定\(n,m,S_1\simS_n\),当\(S_i=0\)时\(A_i\neq\mathrm{mex}(A_1\simA_{i-1})\),反之\(A_i=\mathrm{mex}(A_1\simA_{i-1})\),求值域为\([0,m]\)的\(A\)的数量\(\bmod\998244353\)。\(1\len\le5000,0\lem\le10^9\)。看到题目就会想到......
  • 代码随想录算法训练营第三天| 203.移除链表元素,707.设计链表 ,206.反转链表
    203.移除链表元素给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val==val 的节点,并返回 新的头节点 。题目链接:203.移除链表元素-力扣(LeetCode)注意c++中NULL和nullptr的区别。应该用nullptr来表示空指针。/***Definitionforsingly......