197.回溯算法:复原IP地址(力扣)

代码解决

class Solution {
public:// 存储最终结果的向量vector<string> result;// 判断字符串s从start到end范围内的子串是否是一个合法的IP地址段bool isValid(const string& s, int start, int end){if (start > end) {return false; // 起始位置大于结束位置,不合法}if (s[start] == '0' && start != end) {return false; // 段中以0开头且长度大于1,不合法}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; // 数值大于255,不合法}}return true; // 合法的IP地址段}// 回溯法void backtracing(string s, int index, int pointnum){// 已经插入了三个点if (pointnum == 3) {// 检查最后一个段是否合法if (isValid(s, index, s.size() - 1)) {result.push_back(s); // 合法则将该IP地址加入结果}return;}// 遍历当前字符的所有可能位置for (int i = index; i < s.size(); i++) {// 检查当前段是否合法if (isValid(s, index, i)) {s.insert(s.begin() + i + 1, '.'); // 插入点pointnum++; // 点数加一backtracing(s, i + 2, pointnum); // 继续递归,处理下一个段pointnum--; // 回溯,点数减一s.erase(s.begin() + i + 1); // 移除点} else {break; // 当前段不合法,退出循环}}}// 主函数vector<string> restoreIpAddresses(string s) {// 长度小于4或大于12,不可能形成合法的IP地址if (s.size() < 4 || s.size() > 12) {return result;}// 开始回溯backtracing(s, 0, 0);return result;}
};
  • isValid函数:

    • 用于判断字符串s从start到end范围内的子串是否是一个合法的IP地址段。
    • 合法的IP地址段应满足:长度在1到3之间;不以‘0’开头(除非段长度为1);值在0到255之间。
  • backtracing函数:

    • 采用回溯法生成所有可能的IP地址组合。
    • index表示当前处理的位置,pointnum表示已经插入的点的数量。
    • 当插入了3个点后,检查最后一个段是否合法,如果合法则将其加入结果。
    • 对于每个位置,如果当前段合法,则插入一个点并递归处理下一个段。
  • restoreIpAddresses函数:

    • 主函数,首先检查字符串的长度是否在合法范围内(4到12之间)。
    • 然后调用backtracing函数生成所有可能的合法IP地址。

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

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

相关文章

vue项目集成CanvasEditor实现Word在线编辑器

CanvasEditor实现Word在线编辑器 官网文档&#xff1a;https://hufe.club/canvas-editor-docs/guide/schema.html 源码地址&#xff1a;https://github.com/Hufe921/canvas-editor 前提声明&#xff1a; 由于CanvasEditor目前不支持vue、react 等框架开箱即用版&#xff0c;所以…

开源seata的分布式事务解决方案-XA、AT、TCC、SAGA哪个模式好

分布式事务是分布式系统中非常重要的一部分。假设一个用户购买商品的业务逻辑&#xff0c;系统有3个微服务组成&#xff0c;分别是订单服务、账户服务、库存服务&#xff0c;用户在提交订单后会从用户账户余额中扣款&#xff0c;同时扣减库存数量。在这样的场景下扣款和减库存需…

IDEA中 pom.xml 设置自动提示

IDEA中 pom.xml 自动提示 IDEA中 pom.xml 自动提示设置如下&#xff1a; file–>Settings–>Build,Execution…–>Build Tools–>Maven–>Repositories 会看到类似表格的画面&#xff0c;内容是你的maven地址&#xff0c;选中后&#xff0c;右边有个Update的按…

开放式耳机哪种好用又实用?开放式耳机必入品牌推荐,内行人分享

随着数码技术的不断推出各种各样的新产品&#xff0c;开放式耳机已经逐渐成为有份音乐发烧友的选择&#xff0c;这类耳机从早期的简单音质发展至今日的高解析度&#xff0c;其技术进步&#xff0c;也吸引了一大批开放式耳机的爱好者&#xff0c;开放式耳机以其开放式的设计&…

Springboot3.3 整合ClickHouse注意事项

Spring 3 整合 ClickHouse 的方法可以通过JDBC来实现。首先&#xff0c;确保你有Spring 3和ClickHouse的JDBC驱动。然后&#xff0c;在Spring的配置文件中配置数据源和模板。 Maven依赖示例&#xff1a; <!-- https://mvnrepository.com/artifact/com.clickhouse/clickhou…

对称/非对称加密

对称加密和非对称加密是两种主要的加密方式&#xff0c;用于保护数据的机密性和完整性。它们在密钥的使用和管理上有着显著的不同。 对称加密 原理 对称加密&#xff08;Symmetric Encryption&#xff09;使用相同的密钥进行加密和解密。这意味着发送方和接收方必须共享相同…

2024中国第三方算力中心服务商发展研究报告

来源&#xff1a;科智咨询 近期历史回顾&#xff1a;《江苏省绿色建筑评价标识实施细则》(1).pdf 《江苏省绿色建筑评价标识实施细则》.pdf 【计算工具】钢铁企业碳排放各工序数据收集表.xlsx 【深度报告】钢铁产品碳足迹核算及报告指南.pdf 【专家PPT】宝钢低碳钢铁技术策划及…

巧用newSingleThreadExecutor让异步任务顺序跑

背景 Flume 是 Cloudera 提供的一个高可用的&#xff0c;高可靠的&#xff0c;分布式的海量日志采集、聚合和传输的系统 。一个用来控制 Flume 采集任务的 Web 应用&#xff0c;需要对任务进行管理&#xff0c;主要操作「启动、停止、新建、编辑、删除」&#xff0c;本质就是对…

头歌——机器、深度学习——手写体识别

第1关&#xff1a;神经网络基本概念 任务描述 本关任务&#xff1a;根据本节课所学知识完成本关所设置的选择题。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1.神经网络基本概念。 神经网络基本概念 神经网络由输入层、隐藏层、输出层组成&#xff1b;…

【华为OD机试】最左侧冗余覆盖子串(C++ Java JavaScript Python )

题目 题目描述 给定两个字符串s1和s2和正整数K,其中s1长度为n1,s2长度为n2,在s2中选一个子串,满足: 该子串长度为n1+k该子串中包含s1中全部字母,该子串每个字母出现次数不小于s1中对应的字母,我们称s2以长度k冗余覆盖s1,给定s1,s2,k,求最左侧的s2以长度k冗余覆盖s1的…

逆向学习网络篇:心跳包与TCP服务器

本节课在线学习视频&#xff08;网盘地址&#xff0c;保存后即可免费观看&#xff09;&#xff1a; ​​https://pan.quark.cn/s/31c74a06f8db​​ 在网络通信中&#xff0c;心跳包是一种重要的机制&#xff0c;用于维持客户端与服务器之间的连接状态。本文将深入探讨心跳包的…

动手学深度学习(Pytorch版)代码实践 -卷积神经网络-22池化层

22池化层 import torch from torch import nn# 最大汇聚层和平均汇聚层 def pool2d(X, pool_size, modemax):p_h, p_w pool_sizeY torch.zeros((X.shape[0] - p_h 1, X.shape[1] - p_w 1))for i in range(Y.shape[0]):for j in range(Y.shape[1]):if mode max:Y[i, j] X…

【源码】含70演示高转化率Magento2外贸时装女装跨境电商模板V1.2.2

MagMog是下一代最高转化率和可扩展的跨境电商Magento2主题&#xff0c;让您几乎可以立即上手。这是一个终极解决方案&#xff1a;主题附带一系列电子商务功能&#xff0c;可以启用您商店的隐藏功能&#xff0c;并且您无需支付任何额外费用。 100% 免费。 MagMog从定制设计到内…

AI大模型企业应用实战(16)-langchain核心组件

1 stuff 将文档列表插入到提示词中&#xff0c;适合文档较小或少量文档的应用。 2 refine 通过循环输入文档并迭代更新答案来构建响应&#xff0c;一次只传递给LLM一个文档&#xff0c;适合LLM上下文大小不能容纳的小文档。 参考&#xff1a; https://js.langchain.com/v0.1…

搭建个人官网时如何配置SMTP邮件自动发送

什么是 SMTP&#xff1f; SMTP( Simple Mail Transfer Protocol ) 是一种简单邮件传输协议&#xff0c;可以在互联网上通过SMTP来发送电子邮件&#xff0c;是建模在 FTP 文件传输服务上的一种邮件服务&#xff0c;主要用于传输系统之间的邮件信息并提供来信有关的通知。SMTP 服…

pycharm不能安装包的解决方法

一直使用VScode写python&#xff0c;最近使用pycharm&#xff0c;但是pycharm不能安装包&#xff0c;类似这种 后面直接使用ALT F12跳转终端&#xff1a; pip install 需要添加的包 -i https://pypi.tuna.tsinghua.edu.cn/simple不报错了

量检具管理有一套

量检具是用于测量和检验产品尺寸、形状和质量的工具。有一位年轻的工程师小张&#xff0c;他负责管理工厂的量检具&#xff0c;确保它们能够准确地测量产品尺寸和质量。有一天&#xff0c;小张发现量检具出现了一些问题。他注意到一些量具的读数不准确&#xff0c;导致生产出来…

常见的 Linux 命令

在 Linux 系统中&#xff0c;有许多常用的命令可用于执行各种任务。以下是一些基本和常用的 Linux 命令及其用途&#xff1a; 文件和目录操作 显示当前目录 pwd # 显示当前工作目录的路径列出目录内容 ls # 列出当前目录的文件和子目录 ls -l # 以详细格式列出文件和目录…

【吊打面试官系列-Mysql面试题】NULL 是什么意思?

大家好&#xff0c;我是锋哥。今天分享关于 【NULL 是什么意思&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; NULL 是什么意思? 答&#xff1a;NULL 这个值表示 UNKNOWN(未知):它不表示“”(空字符串)。对 NULL 这个值的任何比较都会生产一个 NULL 值。您不能…

ABAP - SALV SET_ZERO方法不显示金额0.00

财务觉得报表上的金额为0的数据混淆视线&#xff0c;所以提出了报表不显示0.00的格式要求。 要求报表是这个样&#xff1a; SALV提供了 cl_salv_column_table->set_zero() 来进行控制金额0.00是否显示 实现SALV不显示金额0.00关键代码&#xff1a; DATA:lo_columns TYPE …