代码随想录学习Day 24

93.复原IP地址

题目链接

讲解链接

本题属于切割问题,切割问题需要使用回溯算法来将所有的结果搜索出来,与前一题分割回文串是类似的。本题的树形结构如下图所示:

回溯三部曲:

1.递归函数参数及返回值:参数为待分割的字符串s,以及标记每次切割起始位置的index。

def backtracking(self, s, index):

2.递归终止条件:当index位于字符串的末尾,并且path的长度为4时,意味着终止,此时将path中的4个字符串用“.”连接起来并存入result中就得到了一个结果。

if index == len(s) and len(self.path) == 4:self.result.append('.'.join(self.path))return
if len(self.path) > 4:return

3.单层递归逻辑:在每轮循环中截取[startIndex, i]这个区间作为字串,并判断这个子串是否合法。若合法则将其加入path中,然后从i+1的位置开始下一轮递归。

for i in range(index, len(s)):if self.isvalid(s, index, i):self.path.append(s[index:i + 1])self.backtracking(s, i + 1)self.path.pop()

整体代码如下:

class Solution:def __init__(self):self.path = []self.result = []def isvalid(self, s, start, end):  # 判断是否符合IP地址的格式if start > end:return Falseif s[start] == '0' and start != end:  # 不能有前导0return Falsenum = int(s[start:end+1])if num > 255:  # 数值必须小于等于255return Falsereturn Truedef backtracking(self, s, index):if index == len(s) and len(self.path) == 4:  # 当path长度为4且index位于字符串末尾时终止self.result.append('.'.join(self.path))  # 将path中的值用“.”连接起来放入result中returnif len(self.path) > 4:  # 剪枝操作,若长度大于4则直接返回,不需要进行后续搜索returnfor i in range(index, min(index + 3, len(s))):  # min是为了剪枝,不加也可以if self.isvalid(s, index, i):self.path.append(s[index:i + 1])self.backtracking(s, i + 1)self.path.pop()def restoreIpAddresses(self, s: str) -> List[str]:self.backtracking(s, 0)return self.result

78.子集

题目链接

讲解链接

组合问题和分割问题都是收集树的叶子节点,而子集问题是找树的所有节点。子集中集合是无序的,取过的元素不会重复取,所以写回溯算法的时候,for就要从startIndex开始,而不是从0开始。

总体思路与组合问题相差不大,主要就是要注意取的是所有节点而不仅仅是叶子节点。

回溯三部曲:

1.递归函数参数及返回值:数组nums和开始位置strartindex。

def backtracking(self, nums, startindex):

2.递归终止条件:当startindex位于数组末尾时直接返回。

if startindex == len(nums):return

 3.单层递归逻辑:与组合问题基本一致,每次递归下标从i+1开始

for i in range(startindex, len(nums)):self.path.append(nums[i])self.backtracking(nums, i + 1)self.path.pop()

整体代码如下:

class Solution:def __init__(self):self.path = []self.result = []def backtracking(self, nums, startindex):self.result.append(self.path[:])  # 每次递归时都要先收获结果if startindex == len(nums):  # 终止条件returnfor i in range(startindex, len(nums)):self.path.append(nums[i])self.backtracking(nums, i + 1)self.path.pop()def subsets(self, nums: List[int]) -> List[List[int]]:self.backtracking(nums, 0)return self.result

90.子集Ⅱ

题目链接

讲解链接

本题与上一题相比主要区别在于数组中包含重复元素,如果依旧按照原来的方法求子集最后结果中会有重复,所以需要进行去重。而且是在树层上去重而不是树枝。去重的过程则和之前做过的组合总和问题类似,可以考虑使用used数组来进行标记,也可以直接在for循环中进行判断。整体代码如下:

class Solution:def __init__(self):self.path = []self.result = []def backtracking(self, nums, startindex):self.result.append(self.path[:])  # 添加结果if startindex >= len(nums):  # 终止条件,也可以不写returnfor i in range(startindex, len(nums)):if i > startindex and nums[i] == nums[i - 1]:  # 如果i>startindex并且与前一个元素相同,那么说明这个元素已经使用过了,本轮循环直接continue即可continueself.path.append(nums[i])self.backtracking(nums, i + 1)self.path.pop()def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:nums = sorted(nums)  # 去重问题一定要先对数组进行排序self.backtracking(nums, 0)return self.result

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

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

相关文章

2012年认证杯SPSSPRO杯数学建模D题(第一阶段)人机游戏中的数学模型全过程文档及程序

2012年认证杯SPSSPRO杯数学建模 D题 人机游戏中的数学模型 原题再现: 计算机游戏在社会和生活中享有特殊地位。游戏设计者主要考虑易学性、趣味性和界面友好性。趣味性是本质吸引力,使玩游戏者百玩不厌。网络游戏一般考虑如何搭建安全可靠、丰富多彩的…

JVM高级篇之GC

文章目录 版权声明垃圾回收器的技术演进ShenandoahShenandoah GC体验Shenandoah GC循环过程 ZGCZGC简介ZGC的版本更迭ZGC体验&使用ZGC的参数设置ZGC的调优 版权声明 本博客的内容基于我个人学习黑马程序员课程的学习笔记整理而成。我特此声明,所有版权属于黑马…

【C++】拆分详解 - 内存管理

文章目录 前言一、C/C内存分布二、C语言中动态内存管理方式:malloc/calloc/realloc/free三、C内存管理方式  3.1 new/delete操作内置类型  3.2 new和delete操作自定义类型  3.3 operator new与operator delete函数 四、new和delete的实现原理  4.1 内置类型…

【微服务】SpringCloud之Feign远程调用

🏡浩泽学编程:个人主页 🔥 推荐专栏:《深入浅出SpringBoot》《java对AI的调用开发》 《RabbitMQ》《Spring》《SpringMVC》《项目实战》 🛸学无止境,不骄不躁,知行合一 文章目录 …

Solo 开发者周刊 (第10期):Sora 之后,谁是被遗忘的?谁又是被仰望的?

这里会整合 Solo 社区每周推广内容、产品模块或活动投稿,每周五发布。在这期周刊中,我们将深入探讨开源软件产品的开发旅程,分享来自一线独立开发者的经验和见解。本杂志开源,欢迎投稿。 好文推荐 Solo 社区 x 机器之心-再谈复现 …

如何利用HubSpot 出海CRM实现精准海外客户定位与拓展?

在当今全球化的商业环境中,企业寻求海外市场的拓展已成为增长的重要策略。然而,海外市场的复杂性和多样性为企业带来了巨大的挑战。为了有效地定位和拓展海外客户,许多企业选择了HubSpot 出海CRM作为他们的营销和销售管理工具。今天运营坛将带…

Android Glide

1.引入glide implementation com.github.bumptech.glide:glide:4.14.2 // Skip this if you dont want to use integration libraries or configure Glide. annotationProcessor com.github.bumptech.glide:compiler:4.14.2 //Glide 注解处理器 2.AndroidManifest.xml 中添加…

HarmonyOS NEXT应用开发之LocalStorage:页面级UI状态存储

LocalStorage是页面级的UI状态存储,通过Entry装饰器接收的参数可以在页面内共享同一个LocalStorage实例。LocalStorage支持UIAbility实例内多个页面间状态共享。 本文仅介绍LocalStorage使用场景和相关的装饰器:LocalStorageProp和LocalStorageLink。 说…

购买代码签名证书时需提供哪些认证资料?

在软件开发与发布过程中,确保软件的可靠性和完整性至关重要,为此购买代码签名证书是必不可少的环节。然而,许多开发者对于购买该证书所需的具体材料并不十分清楚。下面就为大家详细介绍购买代码签名证书所需材料,助您更好地筹备和…

文心一言指令词宝典之自媒体篇

作者:哈哥撩编程(视频号、抖音、公众号同名) 新星计划全栈领域优秀创作者博客专家全国博客之星第四名超级个体COC上海社区主理人特约讲师谷歌亚马逊演讲嘉宾科技博主极星会首批签约作者 🏆 推荐专栏: 🏅…

考研||考公||就业||其他?-------愿不再犹豫

大三下了,现在已经开学一个多月了,在上个学期的时候陆陆续续吧周围有的行动早的人已经开始准备考研了,当然这只是下小部分人吧,也有一部分人是寒假可能就开始了,更多的则是开学的时候,我的直观感受是图书馆…

【Easy云盘 | 第二篇】后端统一设计思想

文章目录 4.1后端统一设计思想4.1.1后端统一返回格式对象4.1.2后端统一响应状态码4.1.3后端统一异常处理类4.1.4StringUtils类4.1.5 RedisUtils类 4.1后端统一设计思想 4.1.1后端统一返回格式对象 com.easypan.entity.vo.ResponseVO Data public class ResponseVO<T> …

Sharding

Sharding操作 什么是ShardingSharding-JDBC一、引入maven依赖 &#xff08;sharding-jdbc-spring-boot-starter&#xff09;二、水平分表操作&#xff08;一个库多个相同结构表&#xff09;其他的maven依赖版本 &#xff08;shardingsphere-jdbc-core-spring-boot-starter&…

vmware 中的Ubuntu系统虚拟机忘记root密码强制重置操作

忘记密码情况下&#xff0c;vmware虚拟机重置Ubuntu的root密码 在企业使用的vmware ESXI中重置Ubuntu系统root密码 1-本地电脑安装个人版的vmware workstation&#xff0c;目的&#xff1a;vmware ESXI自带的远程控制台无法输入指定的键盘按键&#xff0c;需要借助外部的远程辅…

【ELK】搭建elk日志平台(使用docker-compose),并接入springboot项目

1、环境搭建 前提条件&#xff1a;请自行安装docker以及docker-compose环境 version: 3 services:elasticsearch:image: elasticsearch:7.14.0container_name: elasticsearchports:- "9200:9200"- "9300:9300"environment:# 以单一节点模式启动discovery…

java之static详细总结

static也叫静态&#xff0c;可以修饰成员变量、成员方法。 成员变量 按照有无static分为两种&#xff1a; 类变量&#xff1a;static修饰&#xff0c;属于类&#xff0c;与类一起加载一次&#xff0c;在内存中只有一份&#xff0c;会被类的全部对象共享实例变量&#xff08;…

Elastic AI Assistant for Observability 和 Microsoft Azure OpenAI 入门

作者&#xff1a;来自 Elastic Jonathan Simon 最近&#xff0c;Elastic 宣布 AI 观测助手现已正式向所有 Elastic 用户开放。该 AI 观测助手为 Elastic 观测提供了一种新工具&#xff0c;提供了大型语言模型&#xff08;LLM&#xff09;连接的聊天和上下文洞察&#xff0c;以解…

JavaWeb入门——Web前端概述及HTML,CSS语言基本使用

前言&#xff1a; java基础已经学完&#xff0c;开始学习javaWeb相关的内容&#xff0c;整理下笔记&#xff0c;打好基础&#xff0c;daydayup!!! Web Web&#xff1a;全球广域网&#xff0c;也称万维网&#xff08;www World Wide Web&#xff09;&#xff0c;能够通过浏览器访…

Hadoop MapReduce

MapReduce分为两个阶段&#xff0c;分为Map阶段和Reduce阶段&#xff0c;可以自定义map函数和reduce函数&#xff0c; map函数的输入是行在文件的字节偏移量&#xff0c;value是文件的一行数据。 reduce函数的输入是key和对应key的value组&#xff0c;然后reduce函数可以对这…

加州大学欧文分校英语基础语法专项课程01:Word Forms and Simple Present Tense 学习笔记

Word Forms and Simple Present Tense Course Certificate 本文是学习Coursera上 Word Forms and Simple Present Tense 这门课程的学习笔记。 文章目录 Word Forms and Simple Present TenseWeek 01: Introduction & BE VerbLearning Objectives Word FormsWord Forms (P…