当前位置: 首页 > news >正文

代码随想录算法训练营第27天|93.复原IP地址、78.子集、90.子集二

目录

  • 一、力扣93.复原IP地址
    • 1.1 题目
    • 1.2 思路
    • 1.3 代码
    • 1.4 总结
  • 二、力扣78.子集
    • 2.1 题目
    • 2.2 思路
    • 2.3 代码
    • 2.4 总结
  • 三、力扣90.子集二
    • 3.1 题目
    • 3.2 思路
    • 3.3 代码
    • 3.4 总结

一、力扣93.复原IP地址

(比较困难,做起来很吃力)

1.1 题目

在这里插入图片描述

1.2 思路

同样是分割问题,不过本题需要在字符串上直接进行操作,由于String是不可修改的,所以需要借助StringBuilder来处理字符串的增减及拼接操作;
递归终止条件:设置pointCount来记录点的数量,当ip地址中已加入三个点时终止,然后记得再判断最后一段的有效性;
回溯:pointCount的减减以及删掉刚刚加入到字符串里的点;

1.3 代码

class Solution {public List<String> res = new ArrayList<>();public int pointCount = 0;//ip地址中点的数量public List<String> restoreIpAddresses(String s) {//java处理字符串用StringBuilderStringBuilder str = new StringBuilder(s);backTracking(str,0);return res;}public void backTracking(StringBuilder str,int startIndex){//递归终止条件if(pointCount == 3){//还剩最后一段的合法性未判断if(isVaild(str,startIndex,str.length()-1)){res.add(str.toString());}return;}//递归+回溯for(int i = startIndex;i < str.length();i++){if(isVaild(str,startIndex,i)){//合法,那么加点切割str.insert(i+1,".");pointCount++;backTracking(str,i+2);str.deleteCharAt(i+1);pointCount--;}else{break;}}}//判断字符串str[left,right]左闭右闭是否满足ip段要求public boolean isVaild(StringBuilder str,int left,int right){if(left > right){return false;}//不能含有前导0if(str.charAt(left) == '0' && left != right){return false;}//介于0-255之间int num = 0;for(int i = left;i <= right ;i++){if(str.charAt(i) < '0' || str.charAt(i) > '9'){return false;}num = (num * 10) + (str.charAt(i)-'0');if(num > 255){return false;}}return true;}}

1.4 总结

StringBuilder使用方法:https://blog.csdn.net/qq_50617271/article/details/112686826
判断ip段是否合法时的方法isVaild()中的循环: s[i],表示字符串中的一位,S【i】-0. 把字符串转化成数字。 num*10,是下一个循环的时候上一位数字要左移。假设s=【255】, 循环三次的结果就是 2->25->255.

二、力扣78.子集

2.1 题目

在这里插入图片描述

2.2 思路

如果把 子集问题、组合问题、分割问题都抽象为一棵树的话,那么组合问题和分割问题都是收集树的叶子节点,而子集问题是找树的所有节点!
自己的想法:和组合问题类似,不同的地方是树结构的每个结点的数据都要加入到结果集中,即path当中每加入一个元素就需要将path加入到res结果集里。

2.3 代码

class Solution {public List<List<Integer>> res = new ArrayList<>();public List<Integer> path = new ArrayList<>();public List<List<Integer>> subsets(int[] nums) {res.add(new ArrayList<>(path));//添加空集backTracking(nums,0);return res;}public void backTracking(int[] nums,int startIndex){//递归终止条件if(startIndex == nums.length){return;}for(int i = startIndex; i< nums.length;i++){path.add(nums[i]);res.add(new ArrayList<>(path));backTracking(nums,i+1);path.remove(path.size()-1);}}
}

2.4 总结

如果把 子集问题、组合问题、分割问题都抽象为一棵树的话,那么组合问题和分割问题都是收集树的叶子节点,而子集问题是找树的所有节点!

三、力扣90.子集二

3.1 题目

在这里插入图片描述

3.2 思路

在上一题子集问题的基础上多了个条件:可能包含重复元素,那么就需要先排序,然后按照树的结构横向去重,即兄弟之间去重。

3.3 代码

class Solution {public List<List<Integer>> res = new ArrayList<>();public List<Integer> path = new ArrayList<>();boolean[] used;//记录数据元素是否使用过,用来去重public List<List<Integer>> subsetsWithDup(int[] nums) {used = new boolean[nums.length];for(int i = 0;i<nums.length;i++){used[i] = false;}//先向结果集中加入空集res.add(new ArrayList<>(path));//对原数组排序Arrays.sort(nums);backTracking(nums,0);return res;}//递归回溯public void backTracking(int[] nums,int startIndex){//递归终止条件if(startIndex == nums.length){return;}for(int i = startIndex;i<nums.length;i++){//兄弟去重if(i!=0 && nums[i] == nums[i-1] && used[i-1] == false){continue;}path.add(nums[i]);res.add(new ArrayList<>(path));used[i] = true;backTracking(nums,i+1);path.remove(path.size()-1);used[i] = false;}}
}

3.4 总结

横向(兄弟)去重:注意是used[i-1] == false;即前一个相同的元素没有被用,也就是如果用当前位置元素的话汇合上一次for循环i-1的组合重复,所有要continue,避免重复,即横向(兄弟)去重。

            //兄弟去重if(i!=0 && nums[i] == nums[i-1] && used[i-1] == false){continue;}

相关文章:

代码随想录算法训练营第27天|93.复原IP地址、78.子集、90.子集二

目录 一、力扣93.复原IP地址1.1 题目1.2 思路1.3 代码1.4 总结 二、力扣78.子集2.1 题目2.2 思路2.3 代码2.4 总结 三、力扣90.子集二3.1 题目3.2 思路3.3 代码3.4 总结 一、力扣93.复原IP地址 &#xff08;比较困难&#xff0c;做起来很吃力&#xff09; 1.1 题目 1.2 思路 …...

Java微服务轻松部署服务器

我们在日常开发微服务之后需要再服务器上面部署&#xff0c;那么如何进行部署呢&#xff0c;先把微服务的各个服务和中间件以及对应的端口列举出来&#xff0c;都打包成镜像&#xff0c;以及前端代码部署的nginx&#xff0c;使用docker-compose启动&#xff0c;访问服务器nginx…...

Wordpress站点通过修改.htaccess 设置重定向实现强制 https 访问

要在WordPress站点上通过修改.htaccess文件实现强制HTTPS访问&#xff0c;您可以按照以下步骤进行操作&#xff1a; 登录到WordPress站点管理后台。 在文件管理器或通过FTP访问网站根目录&#xff0c;找到并打开名为 .htaccess 的文件。 在打开的文件中添加以下代码&#xf…...

人大金仓助力国家电网调度中心培养国产数据库专家人才

近日,为进一步提升调度自动化安全可靠水平,提高电网数据应用效能,人大金仓助力国家电网调度中心培养国产数据库专家人才。 调度自动化系统拥有海量电网数据资源,是支撑电网安全经济优质运行的重要保障。数据库是调度自动化系统稳定运行的基石之一,其结构严谨、运行稳定、扩展灵…...

什么是增强型SSL证书?购买一张需要多少钱?

增强型SSL证书是一种提供更高级别安全验证与用户信任度的网络安全工具&#xff0c;也被称为EV证书。相较于DV&#xff08;域名验证&#xff09;和OV&#xff08;组织验证&#xff09;证书&#xff0c;它通过严格的身份核实流程确保网站所有者的合法性和真实性。 首先&#xff0…...

C++:函数传参到函数执行结束发生了什么

首先要明确两个概念 函数实参的入栈从右向左栈区从高地址向低地址偏移 接下来看下面一段代码 void fun(int a,int b,int c){std::cout<<&a<<" "<<&b<<" "<<&c<<std::endl; } int main(){fun(1,2,3); }…...

QT中dumpcpp以及dumpdoc使用

qt中调用COM的方式方法有四种&#xff0c;参考解释在 Qt 中使用 ActiveX 控件和 COM (runebook.dev) 介绍dumpcpp的使用方法Qt - dumpcpp 工具 (ActiveQt) (runebook.dev)&#xff1a; 在安装好了的qt电脑上&#xff0c;通过powershell窗口来实现&#xff0c;powershell比cmd要…...

RPM与DNF的操作实践

这几课有三个目标&#xff1a; 第一步&#xff1a;先配置软件源 跳转到yum.repos.d目录&#xff0c;用vim创建一个openeuler_x84_64.repo文件。这个文件就是我们将会用到的软件源。 我们在里面添加这些东西&#xff0c;保存并退出即可。 然后&#xff0c;我们用yum list all就…...

车道线检测之LaneNet

论文&#xff1a;Towards End-to-End Lane Detection: an Instance Segmentation Approach Github&#xff1a;https://github.com/MaybeShewill-CV/lanenet-lane-detection?tabreadme-ov-file 论文提出一种车道线检测网络LaneNet&#xff0c;该网络以enet为主干网络结构&…...

MySQL连接数不足导致服务异常GetConnectionTimeoutException

文章目录 场景复现解决方案一、调整连接数二、优化程序 场景复现 已经上线正常运行的项目突然很多功能无法使用&#xff0c;查看程序日志发现MySQL报错&#xff0c;异常信息: Could not open JDBC Connection for transaction; nested exception is com.alibaba.druid.pool.Ge…...

软考76-上午题-【面向对象技术3-设计模式】-创建型设计模式01

一、创建型设计模式一览 二、创建型设计模式 2-1、创建型设计模式的概念 一个类创建型模式使用继承改变被实例化的类&#xff1b; 一个对象创建型模式将实例化委托给另一个对象。 对应java的new一个对象。 2-2、简单工厂模式&#xff08;静态工厂方法&#xff09; 简单工厂…...

Matlab 双目相机标定(内置函数)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 相机标定的目的就是要找到从世界坐标转换为图像坐标所用到的投影P矩阵各个系数(即相机的内参与外参)。具体过程如下所述: 1、首先我们需要获取一个已知图形的图像(这里我们使用MATLAB所提供的数据)。 2、找到同…...

【博客7.4】缤果Qt5_TWS串口调试助手V2.0 (高级篇)

超级好用的Qt5_TWS耳机串口调试助手 开发工具: qt-opensource-windows-x86-5.14.2 (编程语言C) 目录 前言 一、软件概要&#xff1a; 二、软件界面&#xff1a; 1.App演示 三、获取 >> 源码以及Git记录&#xff1a; 总结 前言 串口调试助手支持常用的50bps - 10M…...

CSS案例-4.padding导航栏练习

效果 相关数据: 上边框:3px,颜色#ff8500 下边框:1px,颜色#edeef0 背景颜色:#fcfcfc 高度:41px 内边距20px 字体颜色#4c4c4c 知识点 盒子边框border 属性 作用 border-width 定义边框粗细,单位px border-style 边框的样式 border-color 边框颜色 边框样式...

5.1.4.2、【AI技术新纪元:Spring AI解码】Llama2 Chat

Llama2 Chat Meta 的 Llama 2 Chat 是 Llama 2 系列大型语言模型的一部分。它在基于对话的应用程序中表现出色,参数规模范围从 70 亿到 700 亿不等。利用公共数据集和超过 100 万次人类注释,Llama Chat 提供了上下文感知的对话。 通过从公共数据源获取的 2 万亿标记进行训练…...

后台发送GET/POST方法

前言: 1,get请求 2,post请求 3,post,get通用方法 4,其他的get,post写法 正文: 1,get请求 import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; import or…...

计算机考研|双非一战135上岸,408经验分享+复盘

计算机专业的同学真的别想的太天真&#xff01; 相比于其他专业&#xff0c;计算机专业的同学其实还是很有优势的 但是现在随着计算机专业的同学越来越多&#xff0c;找工作的困难程度以及学历自然而然被卷起来了 以前的算法岗基本要求在本科以上&#xff0c;现在基本都是非92研…...

低代码与数字化工具:重塑软件开发的新范式

随着信息技术的飞速发展&#xff0c;软件开发已成为推动数字化转型的核心力量。在这个变革的时代&#xff0c;低代码与数字化工具逐渐崭露头角&#xff0c;它们不仅简化了开发过程&#xff0c;还大大提高了开发效率&#xff0c;成为推动软件开发领域变革的重要力量。 低代码&am…...

如何使用 ArcGIS Pro 生成TIN

三角网是一种常用于表示地表地形的数字地球模型&#xff08;DEM&#xff09;方式&#xff0c;我们可以通过 ArcGIS Pro 将等高线和高程点转换为TIN&#xff0c;这里为大家介绍一下转换方法&#xff0c;希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的高…...

你真的会做抖音小店吗?你做抖店的方法是正确的吗?教学分享

大家好&#xff0c;我是电商花花。 新的一年&#xff0c;不少做抖店的商家都会产生一个疑问&#xff0c;2024年抖音小店无货源还能继续做吗&#xff1f; 做无货源模式还会被处罚吗&#xff1f; 先说答案&#xff0c;2024年抖音小店无货源能做&#xff0c;不仅能做且仍然是抖音…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

BLEU评分:机器翻译质量评估的黄金标准

BLEU评分&#xff1a;机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域&#xff0c;衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标&#xff0c;自2002年由IBM的Kishore Papineni等人提出以来&#xff0c;…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG

TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码&#xff1a;HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...

LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)

在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...

Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践

在 Kubernetes 集群中&#xff0c;如何在保障应用高可用的同时有效地管理资源&#xff0c;一直是运维人员和开发者关注的重点。随着微服务架构的普及&#xff0c;集群内各个服务的负载波动日趋明显&#xff0c;传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能

指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...