代码随想录算法训练营第二十八天|● 93.复原IP地址 ● 78.子集 ● 90.子集II (JS写法)

93 复原IP地址

题目链接/文章讲解:https://programmercarl.com/0093.%E5%A4%8D%E5%8E%9FIP%E5%9C%B0%E5%9D%80.html
视频讲解:https://www.bilibili.com/video/BV1XP4y1U73i/
在这里插入图片描述

思路:

在这里插入图片描述
在这里插入图片描述

/*** @param {string} s* @return {string[]}*/
var restoreIpAddresses = function(s) {const res = [];const path = [];const backTracking = (start) => {//终止条件if(path.length === 4 && start === s.length){ //片段满4段,切指针走到最后即耗尽所有字符res.push(path.join('.'));  //拼成字符串,加入解集return;  //返不返回都行,指针已经到头了,严谨来说还是返回}if(path.length === 4 && start < s.length){  //满4段,但字符没有耗尽,就不用再往下选了return;}//单层循环//枚举出三种选择,三种切割长度for(let len = 1;len <= 3;len++){ //加上要切的长度如果越界了,就不能切割这个长度if(start + len - 1 >= s.length) return;//不能切出'0x'、'0xx',但可以切出'0',所以在这里限制len的大小if(len !== 1 && s[start] == '0') return;//当前选择切除的片段const str = s.substring(start,start+len);//不能超过255,注意这里要把字符串转为数字if(len === 3 && +str > 255) return;path.push(str);//基于当前选择,继续选择,更新指针(更新start)backTracking(start+len);path.pop();}}backTracking(0);return res;};

整体的终止条件在一开始的if语句里面判断,这时候要考虑的是总体的终止条件。
一些细节的判断在for循环里面进行,这时候判断的是是否符合一些小条件。
进行回溯的时候要更新start,start后面加的就是for循环里面的变量。
for循环里面的变量会随每道题意进行变换。

78 子集

题目链接/文章讲解:https://programmercarl.com/0078.%E5%AD%90%E9%9B%86.html
视频讲解:https://www.bilibili.com/video/BV1U84y1q7Ci
在这里插入图片描述

思路1:在执行子递归之前,加入解集,即,在递归压栈前 “做事情”。

在这里插入图片描述
用 for 枚举出当前可选的数,比如选第一个数时:1、2、3 可选。
如果第一个数选 1,选第二个数,2、3 可选;
如果第一个数选 2,选第二个数,只有 3 可选(不能选1,产生重复组合)
如果第一个数选 3,没有第二个数可选
即,每次传入子递归的 index 是:当前你选的数的索引 + 1。
每次递归枚举的选项变少,一直递归到没有可选的数字,那就进入不了for循环,落入不了递归,整个DFS结束。
可见我们没有显式地设置递归的出口,而是通过控制循环的起点,使得最后递归自然结束。

/*** @param {number[]} nums* @return {number[][]}*/
var subsets = function(nums) {const res = [];const path = [];const backTracking = (start) => {//进入子递归之前,加入解集res.push(path.slice());for(let i = start;i < nums.length;i++){path.push(nums[i]);backTracking(i+1);  //是i+1不是start+1,因为在每一次循环里面index是不变的,所以如果更改index会有重复子集path.pop();}}backTracking(0);return res;
};

思路2:逐个考察数字,每个数都选或不选。等到递归结束时,把集合加入解集。

const subsets = (nums) => {const res = [];const dfs = (index, list) => {if (index == nums.length) { // 指针越界res.push(list.slice());   // 加入解集return;                   // 结束当前的递归}list.push(nums[index]); // 选择这个数dfs(index + 1, list);   // 基于该选择,继续往下递归,考察下一个数list.pop();             // 上面的递归结束,撤销该选择dfs(index + 1, list);   // 不选这个数,继续往下递归,考察下一个数};dfs(0, []);return res;
};

90 子集Ⅱ

题目链接/文章讲解:https://programmercarl.com/0090.%E5%AD%90%E9%9B%86II.html
视频讲解:https://www.bilibili.com/video/BV1vm4y1F71J
在这里插入图片描述

思路:40.组合总和II 和 78.子集 ,本题就是这两道题目的结合

判断重复的痛40题,详解见https://blog.csdn.net/weixin_44776979/article/details/136854651
i - 1 >= start这个条件判断式的含义是:当前索引i减去1大于等于起始索引start时,表示当前元素nums[i]和它的前一个相邻元素nums[i - 1]不是相同的元素,即当前元素不与前一个元素重复。

/*** @param {number[]} nums* @return {number[][]}*/
var subsetsWithDup = function(nums) {const res = [];const path = [];nums.sort((a,b) => a-b);const backTracking = (start) => {res.push(path.slice());for(let i = start;i<nums.length;i++){if(i - 1 >= start && nums[i - 1] == nums[i]){continue;}path.push(nums[i]);backTracking(i+1);path.pop();}}backTracking(0);return res;
};

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

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

相关文章

Ollama、Langchain相关学习资源(动态更新)

大型预训练模型如GPT系列、BERT系列等&#xff0c;在消费级产品和垂直行业应用中加快了部署步伐&#xff0c;包括但不限于智能客服、内容创作、代码生成、决策支持等领域。 随着大模型开源&#xff0c;相关的部署工具和框架也得到发展和完善。例如&#xff0c;出现了一些专门针…

微信商家转账到零钱:实用指南,涵盖开通、使用与常见问题

商家转账到零钱是什么&#xff1f; 商家转账到零钱功能整合了企业付款到零钱和批量转账到零钱&#xff0c;支持批量对外转账&#xff0c;操作便捷。如果你的应用场景是单付款&#xff0c;体验感和企业付款到零钱基本没差别。 商家转账到零钱的使用场景有哪些&#xff1f; 这…

基于YOLOv8深度学习的橙子病害智能诊断与防治系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标分类

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

【动态规划】Leetcode 746. 使用最小花费爬楼梯

【动态规划】Leetcode 746. 使用最小花费爬楼梯 解法 ---------------&#x1f388;&#x1f388;题目链接&#x1f388;&#x1f388;------------------- 解法 &#x1f612;: 我的代码实现> 动规五部曲 ✒️确定dp数组以及下标的含义 dp[i] 表示跳跃到第 i 层&#x…

「Swift」AttributedString常见使用方法

前言&#xff1a;AttributedString是Apple推出的可以实现单个字符或字符范围带相应属性的字符串。属性提供了一些文本特性&#xff0c;可以让文本展示的样式更加丰富。在日常开发过程中&#xff0c;我通常用于同一个Label中包含不同的字体大小或字体颜色的样式编写中。 使用举…

11 Games101 - 笔记 - 几何(曲线与曲面)

11 几何&#xff08;曲线与曲面&#xff09; 贝塞尔曲线 定义 贝塞尔曲线&#xff1a;由控制点和线段组成的曲线&#xff0c;控制点是可拖动的支点。 如图&#xff0c;蓝色为贝塞尔曲线&#xff0c;p1, p2, p3为控制点&#xff0c;曲线和初始与终止端点相切&#xff0c;并且…

Java解决作为子字符串出现在单词中的索引

Java解决作为子字符串出现在单词中的索引 01 题目 给你一个字符串数组 patterns 和一个字符串 word &#xff0c;统计 patterns 中有多少个字符串是 word 的子字符串。返回字符串数目。 子字符串 是字符串中的一个连续字符序列。 示例 1&#xff1a; 输入&#xff1a;patterns…

【原理图PCB专题】Cadence 17.4版本导出excel版本坐标文件

坐标文件记录了板卡上每个元件的坐标是生产的基础资料,在PCBA生产时,需要提坐标文件并且务必保证 准确无误。 Cadence导出坐标文件大部分网上的都是txt文件,其格式如下。导出的文件存在没有对应的Title,格式打开混乱等问题。 那么Cadence 17.4版本如何导出有标题、…

操作系统内功篇:硬件结构之软中断

一 中断是什么&#xff1f; 在计算机中&#xff0c;中断是操作系统用来响应请求硬件设备的一种机制&#xff0c;操作系统收到硬件的中断请求&#xff0c;会打断正在执行的进程&#xff0c;然后调用内核中的中断处理程序来响应请求。 这样的解释可能过于学术了&#xff0c;容易…

分布式系统的基本特性

一般&#xff0c;分布式系统需要支持以下特性&#xff1a; 资源共享 开放性 并发性 可伸缩性 容错性 透明性 下面分别讨论。 容易理解的 资源共享 一旦授权&#xff0c;可以访问环境中的任何资源。 资源&#xff1a;包括硬件(e.g. printer, scanner, camera)、软件&a…

对于组件通信的深刻理解

父组件传递数据给子组件 props传递数据 父组件在子组件的标签上写自定义的属性,属性值是自己的变量,当渲染到子组件时,执行props会找自定义属性,内存了变量的内存,可访问到,写props,会生成vue实例的时候,将props的变量赋给,值找变量内存存入变量.插值语句等可访问.父组件会变…

python综合实战案例-数据分析

Python是进行数据分析的好工具&#xff0c;今天就是借助一个案例给大家进行数据分析讲解。 本例设计一个log.txt⽂件&#xff0c;该文件记录了某个项⽬中某个 api 的调⽤情况&#xff0c;采样时间为每分钟⼀次&#xff0c;包括调⽤次数、响应时间等信息&#xff0c;⼤约18万条数…

如何在 Django 中使用 pyecharts

为项目新建一个目录&#xff0c;将其命名为django_pyecharts_demo, 在终端中切换到这个目录&#xff0c;并创建一个虚拟环境。 python -m venv django_pyecharts激活虚拟环境 django_pyecharts\Scripts\activate要停止使用虚拟环境&#xff0c;可执行命令 deactivate创建并激…

【string】查找最长的公共子序列(substr()/find())

实现一个算法查找两个字符串最长的公共子字符串。子字符串的介绍如下&#xff1a; 子字符串是指字符串中任意个连续的字符组成的子序列 输出一行&#xff0c;为最长公共子序列。 分析&#xff1a;使用substr()与find&#xff08;&#xff09;函数 if(str2.find(temp)!string…

【论文精读】MAE:Masked Autoencoders Are Scalable Vision Learners 带掩码的自动编码器是可扩展的视觉学习器

系列文章目录 【论文精读】Transformer&#xff1a;Attention Is All You Need 【论文精读】BERT&#xff1a;Pre-training of Deep Bidirectional Transformers for Language Understanding 【论文精读】VIT&#xff1a;vision transformer论文 文章目录 系列文章目录一、前言…

24. UE5 RPG制作属性面板(二)

在上一篇中&#xff0c;我们创建属性面板的大部分样式&#xff0c;这一篇里面接着制作。 在这一篇里我们需要有以下几个方面&#xff1a; 在界面增加一个属性按钮。属性按钮增加事件&#xff0c;点击时可以打开属性面板&#xff0c;属性面板打开时无法再次点击按钮。点击属性面…

01背包问题dp

01背包 有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。 第 i件物品的体积是 vi&#xff0c;价值是 wi。 求解将哪些物品装入背包&#xff0c;可使这些物品的总体积不超过背包容量&#xff0c;且总价值最大。 输出最大价值。 输入格式 第一行两个整数&#xff0c;N…

手撕算法-无重复字符的最长子串

描述 分析 滑动窗口&#xff0c;记录窗口中的所有出现的字符&#xff0c;然后窗口左边界固定&#xff0c;右边界右滑&#xff0c;如果&#xff0c;窗口中不存在新的字符&#xff0c;则右滑成功&#xff0c;否则左边界右滑&#xff0c;直到窗口中不存在右边界的值。 描述感觉不…

优化大型语言模型表现的策略与方法

在人工智能的世界里&#xff0c;大型语言模型如同 GPT-4 这样的存在&#xff0c;已经成为了一个璀璨的明星。这些模型的强大之处在于它们能够处理各种语言任务&#xff0c;比如写作、翻译和提问等。但是&#xff0c;想要让这些模型发挥出最大的作用&#xff0c;我们需要掌握一些…

登山小分队(dfs,模拟)

原题链接&#xff1a; 题目描述 Foxity和他的好友们相约去爬山&#xff0c;但是他们每个人都来到了不同的山脚下。整个山的结构类似一棵 "树"&#xff0c;有很多的观光节点通过一条条山道连接起来。 在图论中&#xff0c;树是一种无向图&#xff0c;其中任意两个顶…