【力扣刷题练习】93. 复原 IP 地址
题目描述:
有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。
例如:“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “192.168@1.1” 是 无效 IP 地址。
给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 ‘.’ 来形成。你 不能 重新排序或删除 s 中的任何数字。你可以按 任何 顺序返回答案。
题目解答:
class Solution {
private:vector<string> res; // 创建容器储存结果// 回溯的主体void backtrack(string& s, int startIndex, int pointNum) {if (pointNum == 3) {if (isLegal(s, startIndex, s.size() - 1))res.push_back(s);return;}for (int i = startIndex; i < s.size(); i++) {if (isLegal(s, startIndex, i)) {s.insert(s.begin() + i + 1, '.');pointNum++;backtrack(s, i + 2, pointNum);pointNum--;s.erase(s.begin() + i + 1);} else {break;}}}// 判断该串在给定区间内组成数字是否合法bool isLegal(string s, int start, int end) {if (start > end || (s[start] == '0' && start != end))return false;int num = 0;for (int i = start; i <= end; i++) {if (s[i] > '9' || s[i] < '0')return false;num = num * 10 + (s[i] - '0');if (num > 255)return false;}return true;}public:vector<string> restoreIpAddresses(string s) {res.clear();if (s.size() >= 4 && s.size() <= 12) // 长度符合ip地址规则backtrack(s, 0, 0);return res;}
};
题目思路:
-
私有成员变量:
vector<string> res;:用于存储所有可能的合法 IP 地址。
-
回溯函数
backtrack:- 参数:
string& s:输入的字符串。int startIndex:当前处理位置的起始索引。int pointNum:当前已经插入的点号数量。
- 功能:递归地尝试在字符串
s的不同位置插入点号,以生成可能的 IP 地址。 - 终止条件:当已经插入了 3 个点号(即 IP 地址的 4 部分都已经形成),并且当前的字符串
s在startIndex到末尾的部分是一个合法的数字时,将s添加到结果集res中。 - 递归过程:从
startIndex开始遍历字符串s,尝试在每个位置插入点号。如果插入点号后的子串是合法的数字,则递归调用backtrack函数继续处理剩余部分。
- 参数:
-
辅助函数
isLegal:- 参数:
string s:输入的字符串。int start:检查的起始索引。int end:检查的结束索引。
- 功能:判断字符串
s在start到end的子串是否表示一个合法的数字(在 IP 地址的上下文中)。 - 判断逻辑:
- 如果子串的长度超过 3 或以 ‘0’ 开头但不是单个 ‘0’,则不合法。
- 遍历子串的每个字符,如果字符不是数字,则不合法。
- 计算子串表示的数字,如果数字大于 255,则不合法。
- 参数:
-
公有函数
restoreIpAddresses:- 参数:
string s:输入的字符串。
- 功能:主函数,用于启动整个恢复 IP 地址的过程。
- 首先,清空结果集
res。 - 检查输入字符串
s的长度,确保它符合 IP 地址的长度规则(4 到 12 个字符)。 - 调用
backtrack函数开始回溯过程。 - 返回结果集
res。
- 参数:
通过回溯算法,尝试在输入字符串的不同位置插入点号,以生成所有可能的合法 IP 地址组合。在每次尝试插入点号时,都通过 isLegal 函数来检查当前部分是否是一个合法的数字。
相关文章:
【力扣刷题练习】93. 复原 IP 地址
题目描述: 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。 例如:“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址,但是 “0.011…...
linux查看文件内容cat,less,vi,vim
学习记录 目录 catlessvi vim cat 输出 FILE 文件的全部内容 $ cat [OPTION] FILE示例 输出 file.txt 的全部内容 $ cat file.txt查看 file1.txt 与 file2.txt 连接后的内容 $ cat file1.txt file2.txt为什么名字叫 cat? 当然和猫咪没有关系。 cat 这里是 co…...
【恒源智享云】conda虚拟环境的操作指令
conda虚拟环境的操作指令 由于虚拟环境经常会用到,但是我总忘记,所以写个博客,留作自用。 在恒源智享云上,可以直接在终端界面输入指令,例如: 查看已经存在的虚拟环境列表 conda env list查看当前虚拟…...
Flask python 开发篇:项目布局
一、背景简介 Flask应用程序可以像单个文件一样简单。就像上一篇简单实现一个接口一样,所有的东西都在一个python文件内; 然而,当项目越来越大的时候,把所有代码放在单个文件中就有点不堪重负了。 Python 项目使用 包 来管理代码…...
docker 部署prometheus+grafana
首先进行部署docker 配置阿里云依赖: curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo # 配置centos 7的镜像源 yum install -y yum-utils device-mapper-persistent-data lvm2 # 安装一些后期或需要的的一下依…...
RNN实战
本主要是利用RNN做多分类任务,在熟悉RNN训练的过程中,我们可以理解 1)超参数 batch_size和pad_size对训练过程的影响。 2)文本处理过程中是如何将文本的文字表示转化为向量表示 3)RNN梯度消失和序列长度的关系 4&#…...
从GPT入门,到R语言基础与作图、回归模型分析、混合效应模型、多元统计分析及结构方程模型、Meta分析、随机森林模型及贝叶斯回归分析综合应用等专题及实战案例
目录 专题一 GPT及大语言模型简介及使用入门 专题二 GPT与R语言基础与作图(ggplot2) 专题三 GPT与R语言回归模型(lm&glm) 专题四 GPT与混合效应模型(lmm&glmm) 专题五 GPT与多元统计分析&…...
【Android】数据安全(一) —— Sqlite加密
目录 SQLCipherSQLiteCrypt其它 SQLCipher SQLCipher 是 SQLite 数据库的的开源扩展,使用了 256 位 AES 加密,支持跨平台、零配置、数据100%加密、加密开销低至 5 -15%、占用空间小、性能出色等优点,因此非常适合保护嵌入式应用程序数据库&a…...
云原生周刊:Helm Charts 深入探究 | 2024.3.11
开源项目推荐 Glasskube Glasskube 提供了一个用于 Kubernetes 的缺失的包管理器。它具有图形用户界面(GUI)和命令行界面(CLI)。Glasskube 包是具备依赖感知、GitOps 准备和可以通过中央公共包仓库自动更新的特性。 imgpkg imgpkg(发音为:"imag…...
【C++初阶】第六站 : 模板初阶
前言: 本章知识点:泛型编程、函数模板、类模板 专栏: C初阶 目录 泛型编程 函数模板 1.函数模板概念 2.函数模板格式 3.函数模板的原理 4.函数模板的实例化 5.模板参数的匹配原则 类模板 类模板的定义格式 类模板的实例化 泛型编程 如何实现一…...
训练保存模型checkpoint时报错SyntaxError: invalid syntax
在使用pytorch训练保存checkpoint时,出现如下报错: rootautodl-container-745411b452-c5cebfed:~/kvasir-seg-main# python train_transunet.py --loss_function"IoULoss" --training_augmentation0File "train_transunet.py", lin…...
虚拟机中安装Win98
文章目录 一、下载Win98二、制作可启动光盘三、VMware中安装Win98四、Qemu中安装Win981. Qemu的安装2. 安装Win98 Win98是微软于1998年发布的16位与32位混合的操作系统,也是一代经典的操作系统,期间出现了不少经典的软件与游戏,还是值得怀念的…...
《C++游戏编程入门》第4章 标准模板库: Hangman
《C游戏编程入门》第4章 标准模板库: Hangman 4.1 标准模板库4.2 vector04.heros_inventory2.cpp 4.3 使用迭代器04.heros_inventory3.cpp 4.4 使用算法04.high_scores.cpp 4.5 理解向量性能4.6 其他STL容器4.7 Hangman简介04.hangman.cpp 4.1 标准模板库 Standard Template L…...
Linux最小系统安装无法查看IP地址
1,出现原因 服务器重启完成之后,我们可以通过linux的指令 ip addr 来查询Linux系统的IP地址,具体信息如下: 从图中我们可以看到,并没有获取到linux系统的IP地址,这是为什么呢?这是由于启动服务器时未加载网…...
分享个好用的GPT网站
目录 一、背景 二、功能描述 1、写代码 2、联网查询 3、AI绘图 一、背景 我现在的开发工作都依靠ChatGPT,效率提升了好几倍。这样一来,我有更多时间来摸鱼,真是嘎嘎香~ ⭐⭐⭐点击直达 ⭐⭐⭐ 二、功能描述 1、写代码 import java.ut…...
hyperf 二十六 数据迁移 二
教程:Hyperf 参考文章hyperf 二十五 数据迁移 一-CSDN博客 根据之前写的数据迁移的文章,已经说明Hyperf\Database\Schema\Schema::create()实际运行Hyperf\Database\Schema\Grammars\MySqlGrammar::compileCreate()生成的sql字符串。 文档所谓"在…...
linux下如何hook第三方播放器的视频数据?
背景 作为显卡生产商,当用户使用我们的显卡硬解码播放视频时,如果出现比如花屏等问题,为了快速确定问题原因,我们需要一个工具来帮助判断出问题是出在原始视频端,亦或者是应用程序端,亦或者是显卡端。因此我们需要一种方法,来对目标播放器程序进行监控,并捕获到视频源的…...
如何通过Python代码连接OceanBase Oracle租户
背景 目前,连接数据库的Oracle租户,只能通过Java和C的驱动程序,无法通过其他语言的驱动程序。为了满足社区中用户希望在Python代码中连接Oracle租户的需求,这里提供一种替代方案。通过结合使用JayDeBeApi和JDBC,我们可…...
2 月 Web3 游戏行业动态
作者:stellafootprint.network 数据来源:区块链游戏研究页面 - Footprint Analytics 2024 年 2 月,区块链游戏领域在加密货币价格上涨和活跃用户激增的推动下,实现了显著增长。然而,行业在维持用户参与度和留存率方面…...
普发Pfeiffer Prisma QMS200四极质谱计内部电路图装配3D图电路板接口详细注解
普发Pfeiffer Prisma QMS200四极质谱计内部电路图装配3D图电路板接口详细注解...
【2026年最新600套毕设项目分享】基于微信小程序的童装商城(30023)
有需要的同学,源代码和配套文档领取,加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码(前后端源代码SQL脚本)配套文档(LWPPT开题报告/任务书)远程调试控屏包运行一键启动项目&…...
AUTOSAR人才稀缺,为何能撬动百万年薪?
1. AUTOSAR工程师为何成为"抢手货"? 最近两年,智能汽车行业就像一列高速行驶的列车,而AUTOSAR工程师就是这列车上最抢手的"车票"。我身边有个真实案例:一位有7年AUTOSAR开发经验的朋友,去年跳槽时…...
告别Camera2 API的折腾:用UVCAndroid库5分钟搞定安卓外接USB摄像头开发
安卓USB摄像头开发革命:UVCAndroid库极简集成指南 在安卓生态中,外接摄像头的开发一直是个令人头疼的问题。传统Camera2 API的复杂性让不少开发者望而却步——从设备枚举到权限处理,从格式转换到预览控制,每个环节都可能成为项目延…...
告别手动点击!Python脚本批量下载InterPro蛋白质结构域数据(附完整代码)
Python自动化实战:高效批量获取InterPro蛋白质结构域数据 在生物信息学研究中,处理蛋白质结构域数据是许多分析流程的关键起点。手动从InterPro数据库逐个下载数百甚至数千个蛋白质的结构域信息,不仅耗时费力,还容易出错。本文将带…...
如何快速恢复PL2303老芯片兼容性:Windows 10/11终极驱动解决方案
如何快速恢复PL2303老芯片兼容性:Windows 10/11终极驱动解决方案 【免费下载链接】pl2303-win10 Windows 10 driver for end-of-life PL-2303 chipsets. 项目地址: https://gitcode.com/gh_mirrors/pl/pl2303-win10 还在为那些老式PL2303串口设备在Windows 1…...
3步掌握ModTheSpire:Slay the Spire模组加载终极指南
3步掌握ModTheSpire:Slay the Spire模组加载终极指南 【免费下载链接】ModTheSpire External mod loader for Slay The Spire 项目地址: https://gitcode.com/gh_mirrors/mo/ModTheSpire ModTheSpire是《Slay the Spire》最强大的外部模组加载器,…...
CSL编辑器:重新定义学术文献样式编辑的智能方案
CSL编辑器:重新定义学术文献样式编辑的智能方案 【免费下载链接】csl-editor cslEditorLib - A HTML 5 library for searching and editing CSL styles 项目地址: https://gitcode.com/gh_mirrors/csl/csl-editor 你是否曾为学术论文的引用格式而烦恼&#x…...
银河麒麟系统(arm64)下基于CMake的GEOS3.8.2编译实战指南
1. 银河麒麟系统与GEOS编译背景 最近在国产化替代的大背景下,越来越多的开发者开始接触银河麒麟操作系统。作为一款基于Linux的国产系统,银河麒麟在arm64架构上的表现相当出色,但同时也带来了新的挑战——很多常用的开源库并没有现成的arm64…...
如何快速解密网易云音乐NCM文件:终极免费转换工具完全指南
如何快速解密网易云音乐NCM文件:终极免费转换工具完全指南 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM加密文件无法在其他播放器播放而烦恼吗?ncmdump是一款专业的NCM解密工具&…...
生物信息学必备:Aspera 3.X.X与Aspera_cli高速下载NCBI/EBI数据实战指南
生物信息学必备:Aspera 3.X.X与Aspera_cli高速下载NCBI/EBI数据实战指南 在基因组学、转录组学等生物信息学研究中,高效获取公共数据库中的海量数据是每个研究者必须面对的挑战。传统FTP下载方式在面对数百GB的测序数据时往往力不从心,而Aspe…...
