代码随想录算法训练营第二十四天| leetcode93.复原IP地址、 leetcode78.子集、leetcode90.子集II

news/2024/11/14 13:28:06/文章来源:https://www.cnblogs.com/csfy0524/p/18543574

1 leetcode93.复原IP地址

题目链接:93. 复原 IP 地址 - 力扣(LeetCode)

文章链接:代码随想录

视频链接:回溯算法如何分割字符串并判断是合法IP?| LeetCode:93.复原IP地址_哔哩哔哩_bilibili

思路:就是将这个字符串符合要求的进行一个收集,然后使用列表存储,最后使用join函数将这个列表进行连接就好了

1.1自己的代码

才开始犯了个错误,就是终止条件判断的时候忘记整个字符串的长度不能超过四这个条件了

class Solution:def __init__(self):self.result = []self.path = []def restoreIpAddresses(self, s: str) -> List[str]:self.backtracking(s,0)return self.resultdef backtracking(self,s,startindex):if startindex==len(s) and len(self.path[:]) == 4:path = '.'.join(self.path[:])self.result.append(path)return self.resultfor i in range(startindex,len(s)):if self.vaild_num(s[startindex:i+1]):self.path.append(s[startindex:i+1])self.backtracking(s,i+1)self.path.pop()def vaild_num(self,s):if s.isdigit():if 0<=int(s)<=255 and ((len(s)>1 and s[0] !='0')or(len(s)==1)):return Truereturn False

1.2 视频后的思路

感觉视频里的思路对于python而言,没有我自己写的明了,感觉在判断当前的地址合法时有点啰嗦,嗯,更倾向于自己的这种方法

重点:发现这种方法耗时会很短的

class Solution:def restoreIpAddresses(self, s: str) -> List[str]:result = []self.backtracking(s,0,0,'',result)return resultdef backtracking(self, s, start_index, point_num, current, result):if point_num == 3:  if self.is_valid(s, start_index, len(s) - 1): current += s[start_index:] result.append(current)returnfor i in range(start_index, len(s)):if self.is_valid(s, start_index, i): sub = s[start_index:i + 1]self.backtracking(s, i + 1, point_num + 1, current + sub + '.', result)else:breakdef is_valid(self, s, start, end):if start > end:return Falseif s[start] == '0' and start != end:return Falsenum = 0for i in range(start, end + 1):if not s[i].isdigit(): return Falsenum = num * 10 + int(s[i])if num > 255: return Falsereturn True

1.3 本题小结

  1. 其实这道题感觉理解了上个题目的思路以后,并不难,能自己写出来
  2. 我发现虽然在理解上视频的方法会难一点,但是代码的运行速度上面,这种方法确实很快

2 leetcode78.子集

题目链接:78. 子集 - 力扣(LeetCode)

文章链接:代码随想录

视频链接:回溯算法解决子集问题,树上节点都是目标集和! | LeetCode:78.子集_哔哩哔哩_bilibili

思路:嗯,想用之前的方法去尝试,发现好像不太行,还是看视频吧

2.1 视频后的代码

重点:我发现我不知道怎么写的地方居然是如何收获结果的,看了视频觉得自己有点不太聪明的样子

class Solution:def __init__(self):self.result = []self.num = []def subsets(self, nums: List[int]) -> List[List[int]]:self.backtracking(nums,0)return self.resultdef backtracking(self,nums,startindex):self.result.append(self.num[:])if startindex ==len(nums):return for i in range(startindex,len(nums)):self.num.append(nums[i])self.backtracking(nums,i+1)self.num.pop()

2.2 本题小结

  1. 这道题我不知道的是如何收获结果集,但是吧看了视频后又觉得自己不是很聪明的样子
  2. 真的好基础好模板化的一道题目

3 leetcode90.子集II

题目链接:90. 子集 II - 力扣(LeetCode)

文章链接:代码随想录

视频链接:回溯算法解决子集问题,如何去重?| LeetCode:90.子集II_哔哩哔哩_bilibili

思路:看到这道题目,第一反应用之前组合的有一种去重可能就解决了,我先试试

3.1 自己的代码

真的和之前的思路没有任何区别

小问题:第一次提交忘记排序了

class Solution:def __init__(self):self.result = []self.num = []def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:nums.sort()self.backtracking(nums,0)return self.resultdef backtracking(self,nums,startindex):self.result.append(self.num[:])if startindex==len(nums):returnfor i in range(startindex,len(nums)):if i >startindex and nums[i]==nums[i-1]:continueself.num.append(nums[i])self.backtracking(nums,i+1)self.num.pop()

3.2 视频中的方法

使用used的方法,目前掌握的还不是很牢固,但是也还能写吧

class Solution:def __init__(self):self.result = []self.num = []def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:nums.sort()used = [False]*len(nums)self.backtracking(nums,0,used)return self.resultdef backtracking(self,nums,startindex,used):self.result.append(self.num[:])if startindex==len(nums):returnfor i in range(startindex,len(nums)):if i >0 and nums[i]==nums[i-1] and not used[i-1]:continueself.num.append(nums[i])used[i] = Trueself.backtracking(nums,i+1,used)used[i] = Falseself.num.pop()

3.3 本题小结

  1. 这道题目真的没有难题,就是之前内容的一个结合,我目前只掌握了一种方法,使用used的方法会用,但是写的不是很好
  2. 这个题目没有什么难点,做会了前面的题目以后

4 今日小结

  1. 整体题目上没有什么特别新的点,就是在子集的时候我开始不知道如何收集结果
  2. 整体而言,都是比较容易可以上手,可以顺利写完的,第一次花很短的时间看完视频写完题目

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/832869.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Serverless GPU:助力 AI 推理加速

本文将探讨云原生 Serverless GPU 如何从根本上解决这些问题,以实现 AI 技术的高效落地。本文整理自 2024 云栖大会,阿里云智能集团高级技术专家聂大鹏、NVIDIA 解决方案架构师金国强演讲议题《Serverless GPU:助力 AI 推理加速》 近年来,AI 技术发展迅猛,企业纷纷寻求将 …

HyperWorks的shrink warp meshing

在HyperWorks中,针对某些具有复杂几何特征的零部件的网格剖分,Altair HyperMesh 向用户提供了一种名为 Shrink Warp Meshing 的技术,快捷高效地完成有限元模型前处理工作。例如在车辆碰撞分析研究中,用户可以使用 Shrink Warp Meshing 技术快速构建诸如传动系统等(具有复杂…

快速了解电源模块的使用方法 BDB10-12W系列电源模块

快速了解电源模块的使用方法 BDB10-12W系列电源模块电源是整个电路可靠工作的核心部分。然而,由于电源电路的电流和发热量较大,容易出现故障。今天我为大家介绍一下电源模块的使用方法。BOSHDIA电源模块是将电源电路集成到一个很小的PCB板上,从而实现输出稳定电压和大电流的…

GSDml结构

1. 如何方便的看到GSDml的结构在github上找到一个很好用的开源工具以及它的开源汉化,叫xml notepad,可以很好的看到设备树视图。 [2.9.0.8官方下载地址] [汉化插件]2. 文件结构总体就是header和Body两个部分ISO15745Profile | +--ProfileHeader +--ProfileBody|+--DeviceIdent…

什么是CRM系统?CRM系统在企业中扮演什么角色?

近年来,客户关系管理(CRM)系统逐渐显露头角,成为企业把握航向、驶向成功的关键。也有好多人来问关于这方面的问题,所以专门开一篇文章为大家深入了解CRM系统的含义、功能、价值以及它在现代企业中的实际应用,为的呀就是帮助大家全面把握这一概念。 一、CRM系统是什么? 客…

运行 MainApplication 时出错 运行 MainApplication 时出错。命令行过长。 通过 JAR 清单或通过类路径文件缩短命令行,然后重新运行

运行springboot的启动类时,报了这个错。 解决办法: 1、修改选项2、添加缩短命令行项3、选择JAR清单

python 垃圾回收

引用计数器#define PyObject_HEAD PyObject ob_base; #define PyObject_VAR_HEAD PyVarObject ob_base;// 宏定义,包含 上一个、下一个,用于构造双向链表用。(放到refchain链表中时,要用到) #define _PyObject_HEAD_EXTRA \struct _object *_ob_next;标记清除 分…

作业4

作业①: 要求: 熟练掌握 Selenium 查找HTML元素、爬取Ajax网页数据、等待HTML元素等内容。 使用Selenium框架+ MySQL数据库存储技术路线爬取“沪深A股”、“上证A股”、“深证A股”3个板块的股票数据信息。 候选网站:东方财富网:http://quote.eastmoney.com/center/gridlist…

采集opc da 转 profinet IO项目案例

VFBOX协议转换网关支持PLC,modbus,EthernetIP,Profinet,CCLink,EtherCAT,IEC61850,IEC104,bacnet,DLT645,HJ212,opc ua,opc da,DNP3。目录 1 案例说明 1 2 VFBOX网关工作原理 1 3 应用条件 2 4 查看OPC DA服务器的相关参数 2 5 配置网关采集opc da数据 4 6 用prof…

laravel PhpOffice 读取表格数据

/*** 更新安通船期* Description * Author Allen* Date 2024-11-11* @param Request $request [description]* @return [type] [description]*/public function updateAntongShipDate(Request $request){set_time_limit(0);$file = request()->file(file);if (em…

AI网关在企业系统应用中的角色和作用

在人工智能技术不断进步的今天,AI已成为推动全球经济增长的关键动力。预计到2027年,全球企业在AI技术上的支出将达到8000亿美元,年均增长率达到37.3%。这一趋势不仅改变了企业的业务模式,也对企业的安全策略提出了新的挑战,尤其是在构建、运行、扩展和保护AI应用程序及其底…

【python爬虫+情感分析】B站黑神话悟空热门弹幕情感分析及词云生成

黑神话悟空背景介绍 最近黑神话悟空这款游戏可谓红遍大江南北,不仅IGN给出了8分的高分,就连央视新闻都有报道。作为国内第一款单机大作:出圈的是游戏,输出的是中国文化,受到了广大游戏玩家的追捧和赞扬。 针对此热门事件,老王我用python爬虫和情感分析技术,针对B站的弹幕…