代码随想录算法训练营Day25 | 216.组合总和III、17.电话号码的字母组合 | Python | 个人记录向

本文主要是介绍代码随想录算法训练营Day25 | 216.组合总和III、17.电话号码的字母组合 | Python | 个人记录向,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文目录

  • 216.组合总和III
    • 做题
    • 看文章
  • 17.电话号码的字母组合
    • 做题
    • 看文章
  • 以往忽略的知识点小结
  • 个人体会

216.组合总和III

代码随想录:216.组合总和III
Leetcode:216.组合总和III

做题

参照着Day24中77.组合的结构,调试后AC了,代码如下:

class Solution:def combinationSum3(self, k: int, n: int) -> List[List[int]]:self.res = []self.backtracking(k, n, 1, [])return self.resdef backtracking(self, k, target, start, path):if target == 0 and len(path) == k:self.res.append(path[:])elif target != 0 and len(path) == k:returnfor i in range(start, 10):if target - i >= 0:target -= ipath.append(i)else:returnself.backtracking(k, target, i+1, path)path.pop()target += i

看文章

思路类似,只是实际实现不一样,代码如下:

class Solution:def combinationSum3(self, k: int, n: int) -> List[List[int]]:result = []  # 存放结果集self.backtracking(n, k, 0, 1, [], result)return resultdef backtracking(self, targetSum, k, currentSum, startIndex, path, result):if currentSum > targetSum:  # 剪枝操作return  # 如果path的长度等于k但currentSum不等于targetSum,则直接返回if len(path) == k:if currentSum == targetSum:result.append(path[:])returnfor i in range(startIndex, 9 - (k - len(path)) + 2):  # 剪枝currentSum += i  # 处理path.append(i)  # 处理self.backtracking(targetSum, k, currentSum, i + 1, path, result)  # 注意i+1调整startIndexcurrentSum -= i  # 回溯path.pop()  # 回溯

时间复杂度: O(n * 2^n)
空间复杂度: O(n)

17.电话号码的字母组合

代码随想录:17.电话号码的字母组合
Leetcode:17.电话号码的字母组合

做题

无思路。

看文章

回溯法可解决n个for循环问题。
回溯三部曲:

  1. 确定回溯参数
  2. 确定终止条件
  3. 确定单层遍历逻辑

面试代码最好考虑特殊情况(在本题中为输入错误,输入0、1、#等)。
具体代码如下:

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]self.result = []self.s = ""def backtracking(self, digits, index):if index == len(digits):self.result.append(self.s)returndigit = int(digits[index])    # 将索引处的数字转换为整数letters = self.letterMap[digit]    # 获取对应的字符集for i in range(len(letters)):self.s += letters[i]    # 处理字符self.backtracking(digits, index + 1)    # 递归调用,注意索引加1,处理下一个数字self.s = self.s[:-1]    # 回溯,删除最后添加的字符def letterCombinations(self, digits):if len(digits) == 0:return self.resultself.backtracking(digits, 0)return self.result

时间复杂度: O(3^m * 4^n),其中 m 是对应四个字母的数字个数,n 是对应三个字母的数字个数
空间复杂度: O(3^m * 4^n)

以往忽略的知识点小结

  • 回溯法基本流程还是不熟,文章里讲逻辑的模块都是C++,之前就没太捋逻辑,但实际上也很简单,回溯三部曲为:
    1. 确定回溯参数
    2. 确定终止条件
    3. 确定单层遍历逻辑
  • 字符增减的处理:在末尾增加1个字符为 s += letter,在末尾减少1个字符为s = s[ : -1]

个人体会

完成时间:1h20min。
心得:回溯法、字符处理还需要熟悉。

这篇关于代码随想录算法训练营Day25 | 216.组合总和III、17.电话号码的字母组合 | Python | 个人记录向的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/943152

相关文章

[Python] 网络编程(Socket)

1. Socket基础 客户端与服务器连接有两种方式:TCP和UDP,TCP是面向连接的方式(三次握手、四次挥手等),可靠但耗资源,而UDP采用无连接方式,不可靠但速度快。这里面的学问很多,但大部分人知道这些就足够了 2. 一个简单的TCP例子(阻塞方式) 不管是Python还是其它语言,Socket编程几乎都有一个固定模板,下面看一个简单例子,用于计算阶乘和,比如客户端发送5,服务器端返回

计算机毕业设计Python+Spark知识图谱课程推荐系统 课程预测系统 课程大数据 课程数据分析 课程大屏 mooc慕课推荐系统 大数据毕业设计

1 绪 论 1.1 课题研究背景 在线教育学习平台是学生用来进行校内或校外拓展课程学习的平台,平台需要具备在线视频观看,作业提交,形成性考核等功能。在学生学习的过程中,学校的管理者或负责教师需要了解学生的学习情况和学习状态,因此必须要通过学生的学习行为数据进行数据分析,将学生的学习情况直观的展现给用户,方便教师进行学生管理和评测。 现阶段在线教育学习平台,一般会提供两种方向,一种是对普通用户

代码随想录算法训练营第38天|● 509. 斐波那契数 ● 70. 爬楼梯 ● 746. 使用最小花费爬楼梯

动规开始 动归:有很多重叠子问题--状态能顺次推导,后一个动作受到前面动作的影响 (比如前一个动作占了背包的空间 后一个动作受剩下的空间的限制 贪心:每次都是取最小 不受挤压空间干扰) DP的debug:推导DP数组--print出来看是否符合预期 09. 斐波那契数 只需要维护2个数 就一直往前移动 我感觉这个我写的很好看 class Solution:def fib(self, n

从零学算法994

994. 腐烂的橘子 在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一: 值 0 代表空单元格; 值 1 代表新鲜橘子; 值 2 代表腐烂的橘子。 每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。 返回 直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1 。 示例 1: 输入:grid = [[2,1,1],[1,1,0],[0,1

2024年华为OD机试真题-测试用例执行计划-Python-OD统一考试(C卷D卷)

题目描述: 某个产品当前迭代周期内有N个特性( F1,F2,.......FN)需要进行覆盖测试,每个特性都被评估了对应的优先级,特性使用其ID作为下标进行标识。 设计了M个测试用例(T1,T2......,TM ),每个用例对应了一个覆盖特性的集合,测试用例使用其ID作为下标进行标识,测试用例的优先级定义为其覆盖的特性的优先级之和。 在开展测试之前,需要制定测试用例的执行顺序,规则为:优先级大

代码随想录35期Day38-Java(Day37休息)

Day38题目 LeetCode509.斐波那契数列 核心思想:很简单dp[i]=dp[i-1]+dp[i-2].这里用了数组存储的形式,也可以递归 class Solution {public int fib(int n) {int[] dp = new int[n+2];dp[0] = 0;dp[1] = 1;for(int i = 2 ; i <= n ; i ++){dp[i] =

科赛网 魔镜杯“风控算法比赛”赛后总结

1.问题描述 从平均400个数据维度来评估当前用户的信用状态,给每个借款人打出当前状态的信用分。在此基础上,再结合新发标的信息,打出对于每个标的6个月内逾期率的预测,为投资人提供了关键的决策依据,促进健康高效的互联网金融。 2.数据集 数据是国内网络借贷行业的贷款风险数据,包括信用违约标签(因变量)、建模所需的基础与加工字段(自变量)、相关用户的网络行为原始数据。数据下载地址: Maste

xgboost[python版本]的安装

首先需要下载的是: xgboost 在window 下的安装包; Microsoft Visual Studio 2013; anaconda安装包 安装步骤: 先安装anaconda 安装包,里面包括scipy ,python ,numpy ,matplotlib 等众多第三方库;安装包下载时注意要看是32位还是64 位,之后就是一键安装,方便快捷无污染。进入xgboost-maste

点云从入门到精通技术详解100篇-基于车载 LiDAR 的雨雪天气点云滤波算法研究(续)

目录 2.2.2 衍生算法 2.2.2.1 DROR 2.2.2.2 DSOR 2.2.2.3 DDIOR 3算法改进及评价指标