代码随想录算法训练营第28天|回溯

回溯part04

93. 复原 IP 地址

组合问题(分割问题)

调试了两次,第一是是边界值cn没有弄正确,如果初始取1的话,只有在等于5的时候才会退出,下面这个是改过了,初始取0

/*** @param {string} s* @return {string[]}*/
// 25525511135
// 分割问题
var restoreIpAddresses = function(s) {let res = [];backtracking(s, 0, res, 0, "");return res;
};//只能分割4次
//cn为分割次数
function backtracking(s, startIndex, res, cn, ipAddress) {if(startIndex == s.length && cn == 4){//分割到尾巴了,且正好分割了四次res.push(ipAddress);return;}if(cn > 4) return;//取以starIndex开头,以i结尾的字符串(i取不到,所以这里的i可以遍历到length,而不是length-1)for(let i = startIndex + 1; i <= s.length && i <= startIndex + 3; i++){let subStr = s.slice(startIndex, i);//判断子串是否合法//不合法if(!isLegal(subStr)) continue;//合法if(cn == 0) backtracking(s, i, res, cn + 1, ipAddress + subStr);else backtracking(s, i, res, cn + 1, ipAddress + '.' +  subStr);}
}function isLegal(str){if(str[0] == '0' && str.length != 1) return false;if(Number(str) > 255) return false;return true;
}

78. 子集

/*** @param {number[]} nums* @return {number[][]}*/
var subsets = function(nums) {let res = [];backtracking(nums, 0, [], res);return res;
};
//迭代的深度是不固定的,在迭代的深度,即子集的长度没有到达num.length之前都不需要return
function backtracking(nums, startIndex, path, res) {if(path.length < nums.length){res.push([...path]);}else if(path.length == nums.length){res.push([...path]);return;}for(let i = startIndex; i < nums.length; i++){path.push(nums[i]);backtracking(nums, i + 1, path, res);path.pop();}return;
}

90. 子集 II

/*** @param {number[]} nums* @return {number[][]}*/
var subsetsWithDup = function(nums) {let res = [];//要去重一定要记得先排序nums.sort();let used = new Array(nums + 1).fill(0);backtracking(nums, 0, [], res, used);return res;
};function backtracking(nums, startIndex, path, res, used) {if(path.length <= nums.length){res.push([...path]);}if(path.length >= nums.length) return;for(let i = startIndex; i < nums.length; i++){//如果当前元素和其的前一个元素值一样的话//如果此时是在层间(即在回溯后的节点上)//如果前一个节点没有被使用,那么就是回溯的节点上//此时,应该直接跳过,因为值相同if(i > 0 && nums[i] === nums[i - 1]){if(!used[i-1]) continue;}path.push(nums[i]);used[i] = true;backtracking(nums, i + 1, path, res, used);used[i] = false;path.pop();}return;
}

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

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

相关文章

一、Electron 环境初步搭建

新建一个文件夹&#xff0c;然后进行 npm init -y 进行初始化&#xff0c;然后我们在进行 npm i electron --save-dev , 此时我们按照官网的教程进行一个初步的搭建&#xff0c; 1.在 package.json 文件进行修改 {"name": "electron-ui","version…

【全开源】多功能投票小程序系统源码(ThinkPHP+FastAdmin+Uniapp)

&#x1f680; 多功能投票小程序&#xff0c;让决策变得更简单&#xff01; 基于ThinkPHPFastAdminUniapp开发的多功能系统&#xff0c;支持图文投票、自定义选手报名内容、自定义主题色、礼物功能(高级授权)、弹幕功能(高级授权)、会员发布、支持数据库私有化部署&#xff0c…

Python 的七个HTTP请求库对比

Python HTTP请求库对比 库名称特点优点缺点requests简单易用的HTTP库&#xff0c;基于urllib3。- 语法简洁- 社区支持强大- 易于上手和维护- 阻塞式调用&#xff0c;不支持异步操作- 相比aiohttp体积较大http.clientPython标准库中的低级HTTP库。- 无需安装第三方库- 提供底层…

Java项目如何外发告警日志到企业微信

前言 最近领导交代了一个需求,就是有些许客户不单单满足平台告警日志外发到邮箱、短信的形式,还要以消息聊天的形式外发给企业微信。 具体操作 1、注册企业微信。 2、登录企业微信,找到应用管理,创建应用。 3、创建完之后需要记录以下图片中两个值的信息。 4、然后记录下…

vue实现大语言模型返回的数据将代码高亮显示的实现

0. 引言 最近在学习ai大模型相关的东西&#xff0c;就想着自己做一个类似于chatGPT的网站&#xff0c;做到最后的时候代码块始终是不能高亮显示&#xff0c;以前一直搞Java没太了解过前端vue相关的东西&#xff0c;经过自己查资料&#xff0c;自己慢慢也是研究出来了。 这个项目…

android原生TabLayout之自定义指示器效果

“com.google.android.material.tabs.TabLayout” 这个玩意说起来大家都不陌生。结合viewPager或者单独使用。场景非常多。当然市面上的三方也数不胜数。但是毕竟是亲儿子。用起来终归是顺手一些。下面说一下TabLayout的具体用法细节&#xff1a; 首先&#xff0c;xml布局引入…

RFID模块板子JY-LD6900通用自由口协议通信说明

RFID模块板子JY-LD6900是健永科技基于RFID无线射频识别技术推出的一款低频读卡模块&#xff0c;体积小巧&#xff0c;性能优越&#xff0c;读卡时间小于30ms&#xff0c;识别速度达2m/s&#xff0c;配套62mm直径圆形天线&#xff0c;读卡距离可达20cm以上。支持双频134.2kHz、1…

分享:618学习狂欢节活动来啦——大数据培训班

618狂欢学习节 限时优惠大放送 活动时间&#xff1a;6月1日—6月18日

商淘云电商分账系统如何为企业降低连锁财务成本

当今激烈的市场竞争中&#xff0c;连锁品牌企业面临着多样化的挑战&#xff0c;其中财务管理尤为关键。商淘云连锁收银系统作为一款专为连锁品牌量身定制的解决方案&#xff0c;不仅可以帮助企业实现总部入账管控财务、银行结算规范财务的目标&#xff0c;还能通过分账系统优化…

进口氮封阀的性能-美国品牌

进口氮封阀以其优良的性能、紧凑的结构、精确的调节、可靠的安全性和广泛的应用范围&#xff0c;在多个行业中发挥着重要作用。进口氮封阀的性能可以从以下几个方面进行归纳和总结&#xff1a; 材质与耐用性&#xff1a; 进口氮封阀通常采用高品质的材料制造&#xff0c;如不锈…

前端判断数据类型的方法有哪些?

1、typeof &#xff08;1&#xff09;返回&#xff1a;一个值的数据类型的字符串 &#xff08;2&#xff09;可以判断&#xff1a;一个值的数据类型是 string、number、boolean、object、function 等 &#xff08;3&#xff09;无法判断&#xff1a;对于复杂数据类型就不起作…

什么是SIEM

SIEM 解决方案是一种企业级应用程序&#xff0c;可集中和自动化与网络安全相关的操作&#xff0c;该工具通过收集、分析和关联从组织 IT 基础设施中的各种实体聚合的网络事件来帮助应对网络威胁。 与帮助监控和评估组织物理空间中的危险的监视控制台相比&#xff0c;SIEM解决方…

【漏扫工具】Afrog V3.0.6一款漏洞扫描神器

简介 [Afrog]是一款高性能的漏洞扫描器&#xff0c;快速稳定。它支持用户自定义的 PoC&#xff0c;并内置了多种类型&#xff0c;例如 CVE、CNVD、默认密码、信息泄露、指纹识别、未经授权的访问、任意文件读取和命令执行。借助 afrog&#xff0c;网络安全专业人员可以快速验证…

从一道题看利用sqlite打jdbc达到RCE

前言 从今年国赛的一道java题遇到了sqlite数据库去打jdbc达到RCE的姿势&#xff0c;故笔者写篇文章记下 复现 反编译源代码可以看见这三个数据库 这里提供了mysql sqlite psql 但mysql和psql都不行 这里我们用sqlite去打 jdbc就可以执行load_extension() CVE-2023-32697&#…

Jira的原理及应用详解(二)

本系列文章简介: 在当今快速发展的软件开发和项目管理领域,有效的团队协作和精确的项目进度追踪是确保项目成功的关键。Jira作为一款广受欢迎的项目和问题追踪工具,以其强大的功能、灵活的定制性以及卓越的用户体验,赢得了全球众多企业的青睐。 Jira最初由Atlassian公司开发…

numpy 函数库 分类整理概览

numpy 函数库 分类整理概览 数组创建和转换 abs, absolute, arange, array, asanyarray, asarray, ascontiguousarray, asfarray, asfortranarray, atleast_1d, atleast_2d, atleast_3d, empty, empty_like, eye, full, full_like, from_dlpack, frombuffer, fromfile, fromf…

机关事业单位需要进行等保测评吗?一年要几次?

机关事业单位需要进行等保测评吗&#xff1f;一年要几次&#xff1f; 【回答】&#xff1a;根据规定&#xff0c;机关事业单位应当自行或者委托具有相应资质的第三方网络安全服务机构&#xff0c;对互联网政务应用网络和数据安全每年至少进行一次安全检测评估。机关事业单位每…

重磅就业报告前美股涨势消减,标普暂别纪录高位,英伟达盘中闪崩近6%,欧央行降息预期“退烧”,欧元跳涨

标普纳指创盘中历史新高后转跌&#xff0c;道指三连涨至近两周新高&#xff1b;芯片股指和台积电美股跌落纪录高位&#xff0c;英伟达三日收创历史新高后回落&#xff1b;游戏驿站盘中一度暴拉50%。中概股指回落&#xff0c;财报后蔚来收跌6.8%。欧央行会后&#xff0c;欧元盘中…

美颜SDK与直播美颜插件:开发者指南与优化技巧

本篇文章&#xff0c;小编将详细探讨如何利用美颜SDK和直播美颜插件进行开发&#xff0c;以及在实际应用中优化这些工具的技巧。 一、美颜SDK简介 美颜SDK这些功能通过复杂的图像处理算法实现&#xff0c;SDK的存在大大简化了开发者的工作&#xff0c;使他们无需从零开始编写…

项目3:从0开始的RPC框架

一. 基本概念 区别于传统的增删改查型的业务项目&#xff0c;本项目侧重于开发框架&#xff0c;并且涉及架构方面的技术知识点。 1. 什么是RPC&#xff1f; 远程过程调用&#xff08;Remote Procedure Call&#xff09;&#xff0c;是一种计算机通信协议&#xff0c;它允许程…