首页 > 编程语言 >25天【代码随想录算法训练营34期】第七章 回溯算法part02 ( ● 216.组合总和III ● 17.电话号码的字母组合)

25天【代码随想录算法训练营34期】第七章 回溯算法part02 ( ● 216.组合总和III ● 17.电话号码的字母组合)

时间:2024-04-13 19:24:22浏览次数:28  
标签:digitsLetterList self 随想录 len 算法 result 字母组合 path backtracking

**216.组合总和III **

class Solution:
    def combinationSum3(self, k: int, n: int) -> List[List[int]]:
        result = []
        self.backtracking(k, n, 1, [], result, n)
        return result
    def backtracking(self, k, n, startingIndex, path, result, sum_):
        if len(path) == k and sum_ == 0:
            result.append(path[:])
            return
        for i in range(startingIndex, n+1):
            path.append(i)
            sum_ -= i
            self.backtracking(k, n, i+1, path, result, sum_)
            path.pop()
            sum_ += i

17.电话号码的字母组合

class Solution:
    def letterCombinations(self, digits: str) -> 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 = []
        digitsLetterList = []
        for i in digits:
            digitsLetterList.append(map_[i])
        self.backtracking(0, digitsLetterList, [], result, len(digits))
        return result

    def backtracking(self, startingIndex, digitsLetterList, path, result, len_):
        if len(path) == len_:
            if len(path) > 0:
                result.append(''.join(path))
            return
        for i in range(len(digitsLetterList[startingIndex])):
            path.append(digitsLetterList[startingIndex][i])
            self.backtracking(startingIndex+1, digitsLetterList, path, result, len_)
            path.pop()

标签:digitsLetterList,self,随想录,len,算法,result,字母组合,path,backtracking
From: https://www.cnblogs.com/miramira/p/18133232

相关文章

  • 24天【代码随想录算法训练营34期】第七章 回溯算法part01 ( ● 理论基础 ● 77. 组合
    **理论基础**voidbacktracking(参数){if(终止条件){存放结果;return;}for(选择:本层集合中元素(树中节点孩子的数量就是集合的大小)){处理节点;backtracking(路径,选择列表);//递归回溯,撤销处理结果}}......
  • 排序算法-快速排序
    排序算法-快速排序一、快速排序介绍1.1原理介绍快速排序(QuickSort)是一种常用的排序算法,也是一种基于分治思想的排序算法。快速排序的基本思想是选取一个基准元素,将数组分成两部分,使得左边部分的元素都小于等于基准元素,右边部分的元素都大于等于基准元素,然后对左右两部分分别......
  • 算法
    算法1、定义算法是解决特定问题或执行特定任务的一系列明确定义的步骤或指令。它是一个用于解决问题的有序集合,通过一系列的操作来转换输入数据为所需的输出结果。2、特点算法通常具有以下特征:有限性(Finiteness):算法必须在有限的步骤内结束,不会无限循环或持续执行下去。确定......
  • 排序算法
    排序算法1.排序算法定义:排序算法是一种将数据元素按特定顺序(通常是升序或降序)排列的算法。排序是计算机科学中最基本的操作之一,用于数据组织和优化搜索算法等。2、排序算法分类快速排序归并排序堆排序冒泡排序快速排序:快速排序是一种高效的分治排序算法,通过选定一个'......
  • 最小生成树 Kruskal 算法
    Kruskal算法edge存储边起点、终点、边权fa[x]存储x的父节点1、先初始化父节点2、按边的权排序(贪心思想)3、如果不在同一集合内,把这条边加入最小生成树,并且合并两个集合,反之就跳过4、最后根据连接的点是否是顶点的个数减一确定能否生成最小生成树如下图,红色表示取的边和次......
  • 数据分享|R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病|附代码
    全文链接:http://tecdat.cn/?p=23061最近我们被客户要求撰写关于预测心脏病的研究报告,包括一些图形和统计输出。这个数据集可以追溯到1988年,由四个数据库组成。克利夫兰、匈牙利、瑞士和长滩。"目标"字段是指病人是否有心脏病。它的数值为整数,0=无病,1=有病数据集信息:目标:主......
  • 最短路算法(Dijkstra + SPFA + Floyd)
    最短路算法(Dijkstra+SPFA+Floyd)Dijkstra算法1.算法基本介绍Dijkstra算法通常是求解单源最短路中最快的算法,但它无法处理存在负权边的情况(原因在正确性证明中)。Dijkstra本质上是一种贪心算法,通过不断调整每个点的“当前距离”最终得到最优结果,其实后面要讲到的几种算法也大......
  • C++算法题解 - 递归实现排列型枚举 - 递归法 (图文) (递归搜索树)
    题目:递归实现排列型枚举把1∼n这n个整数排成一行后随机打乱顺序,输出所有可能的次序。输入格式一个整数n。输出格式按照从小到大的顺序输出所有方案,每行1个。首先,同一行相邻两个数用一个空格隔开。其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面。数据......
  • 常见的排序算法——冒泡排序(二)
    本文记述了冒泡排序微小改动的基本思想和一份参考实现代码,并在说明了算法的性能后用随机数据进行了验证。◆思想更少的比较可以节省一定的时间,此改动可以减少更小范围的比较。(把水平陈列的数组逆时针旋转90°后,有助于理解后续的内容。)将包含顶层以下的所有元素作为待排序范围......
  • 算法学习笔记(13):同余最短路
    同余最短路是一种通过同余把状态分类,再通过建图跑最短路解决问题的算法。可以高效率解决一些特定的问题。非常的奇妙。算法鉴于学不懂,所以直接搬\(oi-wiki\)的题吧。呜呜呜。P3403跳楼机有一栋高为\(h\)的楼,初始在一楼,每次可以向上移动\(x\),\(y\),\(z\)层,也可......