leetcode每日一题复盘(10.30~11.5)

leetcode 93 复原ip地址 

a02929024d9f4c2185c09a23c0929f7f.png

这一题和之前的分割回文串有异曲同工之妙,都是给一组数据让你判断分割成几组小数据,代码主要分成三部分,用来判断的函数,回溯函数,主函数;最好是在原数据上面进行操作,我一开始就是新开了一个字符串做起来反而困难

首先说判断函数,这个根据题目我们可以很容易就写出代码来,需要注意的是判断是否大于255时,我们要用num来记录整个字符串对应整数的大小,因此需要用num=10*num进行进位

其次是回溯函数,回溯函数我们都知道主体是backtracking包含for,for再包含backtracking,除此之外还有一个终止递归的条件,这里我们引进一个变量来记录逗号的数量,当逗号等于三的时候我们就可以判断第四段ip地址,以此选择是否加入结果集中

这里我们讲一下抽象的概念方便理解,工作指针i可以看作我们划的那条线,i前面的可以看作这一次需要判断的数据,如果符合要求则继续递归,不符合要求则进行横向遍历,以此保证每一段ip地址都是合法的,i后面的则是我们下一次需要遍历的数据,即startindex=i+1;

感觉理清楚了思路还是比较好写的,难就难在你判断函数代码怎么写好,能不能想到先处理前三段再处理第四段,能不能想到直接在原数据上面操作,这些就是需要我们思考的地方,做题量和思考缺一不可

leetcode 90 子集2 

9996857b08f14131a69a2c8be714634e.png

这又是一种新的题型了,感觉做回溯最重要的是分辨出是那种题型,现在已经涉及到组合,分割,子集三种类型了,组合是在数据中取一个数,剩下的数作为下一次的遍历的数据,整个树枝当作一组放入结果;分割和组合差不多,先分割一个/多个数据出去,判断这个数据,剩下的数据作为下一次遍历的数据;而子集是将每一次的判断的数据都放入结果集中,这是和上面两种不同的地方,因此每一次回溯
backtracking都有一次pushback操作

将每一个树支当作以该元素开头的子集就好容易理解了,例如123,取1就是以1开头的子集

允许结果重复and不允许结果重复

允许重复即不用去重了,因为数据里会有重复的数,在遍历的时候会有重复结果出现,例如1444,第一个4就已经包含了后面几个4的情况,允许重复的话就不用管直接遍历整个数组/字符串即可

如果不允许结果重复,即需要比较前一个和当前数据是否相同,相同则跳过continue,相当于进行了剪枝操作(需要先进行排序操作)

leetcode 491 递增子序列

c09a997ed73f44729a6b7b918f484ae3.png

这一题和上一题子集看起来差不多,直接套模板,然后就错了😂,专题刷题就是容易死背模板,然后缺少自己的思考

这一题的要求是找到所有递增子序列,长度大于1,看起来和上一题要求差不多,但是做起来的时候有很大的差别,主要有两点

首先是要求递增,而子集那道题是不要求递增的,排序之后相邻去重即可,本题给出的数据不一定是递增的,因此无法相邻去重也就用不了nums[i]==nums[i-1]去判断了;可以排序再相邻去重吗?答案当然是不可以的,你把数据都改变了相当于把题改了答案也都不一样了

其次是去重方式,上面说到了无法使用相邻去重,那么如何进行判断呢(path路径上上一个节点的下标和当前下标不一定相邻,例如416,46下标不相邻),那就需要用到uset记录每一层中使用了的数据,就可以避免在同一层中重复(例如4717,同一层中先选择了第一个7,第二个7就可以跳过了,避免出现两次47),这样也就实现了隔项去重了

为什么uset不是记录同一树枝上面的值呢?因为数据允许数据重复,即4477是容许的

理解去重方式不同是解决本题的关键,相邻去重的方式只适合顺序数据

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

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

相关文章

敲敲云零代码平台—近期亮点功能,让开发者对零代码心动~

近期敲敲云零代码平台,更新了很多实用新功能,包括汇总组件添加了筛选条件,增加了汇总日期控件,子表添加了批量添加和默认值等等。 1. 单选/多选/下拉选择 颜色设置 效果展示 在列表和表单中可通过不同颜色显示字段的不同等级或者…

Reading:Deep dive into the OnPush change detection strategy in Angular

原文连接:IndepthApp 今天深入阅读并总结Angualr中onPush更新策略。 1. 两种策略 & whats Lview? Angular 实现了两种策略来控制各个组件级别的更改检测行为。这些策略定义为Default和OnPush: 被定义为枚举: export enum…

CSS3弹性布局

2009年,W3C提出一种崭新的布局方案—弹性盒(Flexbox)布局,使用该模型可以轻松地创建自适应窗口的流动布局,或者自适应字体大小的弹性布局。W3C的弹性盒布局分为旧版本、新版本及混合过渡版本3种不同的设计方案,其中混合过渡版本主…

复杂任务也不怕!上海AI Lab提出增强型LLM框架—ControlLLM,大模型可操控多模态工具

多模态交互的一个新兴的实现方式是工具增强语言模型,这些模型将大型语言模型(LLM)作为主要控制器,并将具有不同功能的工具作为插件进行整合。这有助于解决各种多模态任务,并为多模态交互中的创新应用打开了大门。 尽管…

【设计模式】第11节:结构型模式之“装饰器模式”

一、简介 装饰器模式主要解决继承关系过于复杂的问题,通过组合来替代继承。它主要的作用是给原始类添加增强功能。这也是判断是否该用装饰器模式的一个重要的依据。除此之外,装饰器模式还有一个特点,那就是可以对原始类嵌套使用多个装饰器。…

呵护笔记本屏幕,同时获得更全方位的隐私保护

之前看到很多人都在给手机贴防窥膜,但是我试过之后觉得效果并不好。其实,防窥膜这个东西用在笔记本上会更实用一些。特别是那些经常在公共场所办公的朋友,比如我。最近我发现了一款威宝的防窥膜,质量非常靠谱。如果你也有同样的需…

如何进行回馈式直流负载测试

回馈式直流负载测试是将负载连接到电源输出端,以模拟实际工作条件,然后测量电源在不同负载条件下的性能表现,包括直流负载、电源供应器、电流表和电压表等。确保这些设备能够满足测试需求,将电源供应器的正极连接到直流负载的输入…

fiddler的基本功能介绍

前几天看了下fiddler课程视频,讲的很不错,先从整体上来看,大概分为三个部分:fiddler主界面。 上面部分是菜单栏,左侧是监听视图,右边是操作控制栏 如果你想要清除抓包里所有的内容,点击菜单栏里…

【Javascript】Javascript高级程序设计:js 事件 随手笔记

目录 一、事件概述1.1 html 与 js1.2 事件流1.3 DOM 事件流 二、事件处理程序2.1 html 事件处理程序2.2 dom0 级事件处理程序2.3 dom2 级事件处理程序2.4 IE 事件处理程序 三、事件对象四、事件类型4.1 概述4.2 UI 事件4.3 焦点事件4.4 鼠标与滚轮事件4.5 键盘与文本事件4.6 额…

蓝桥杯(C++ 扫雷)

题目&#xff1a; 思想&#xff1a; 1、遍历每个点是否有地雷&#xff0c;有地雷则直接返回为9&#xff0c;无地雷则遍历该点的周围八个点&#xff0c;计数一共有多少个地雷&#xff0c;则返回该数。 代码&#xff1a; #include<iostream> using namespace std; int g[…

Cordova插件开发二:高精度定位之卫星数据解析

文章目录 1.最终效果预览2.坐标获取方法3.在公共类中封装获取坐标的通用方法4.插件js中封装startGeoLocation方法5.插件主界面封装的方法1.最终效果预览 2.坐标获取方法 let obj = Object.assign({}, this.mapConfig.mapLocationObj)obj.isKeepCallBack = falselet res = await…

HTML标题、段落、文本格式化

HTML标题&#xff1a; 在HTML文档中&#xff0c;标题是很重要的。标题是通过<h1> - <h6标签进行定义的&#xff0c;<h1> 定义最大的标题&#xff1b;<h6>定义最小的标题。 <hr> 标签在HTML页面中用于创建水平线&#xff0c;hr元素可用于分隔内容。…