[力扣题解]93. 复原 IP 地址

题目:93. 复原 IP 地址

思路

回溯法;
特别的是,用pointNum来记录.的数量,并且没有创建path,而是直接在原来的strings中插入.
同时,在判断子串合法性的时候,0是合法的,0100是不合法的;

代码

Method 1


class Solution {
public:vector<string> result; //void backtracking(string& s, int startIndex, int pointNum){int i;if(pointNum == 3){string temp1 = s.substr(startIndex, s.size()-startIndex);if(isValid(temp1)){result.push_back(s);}return;}for(i = startIndex; i < s.size(); i++){// 判断子区间[startIndex, i]是否合法ßstring temp2 = s.substr(startIndex, i-startIndex+1);if(isValid(temp2)){s.insert(s.begin()+i+1, '.'); //你为什么要加一个s.begin()// pointNum++;backtracking(s, i+2, pointNum+1);// pointNum--;s.erase(s.begin()+i+1);}// 不合法, 直接结束else{break;}}}// 使用 istringstreambool isValid(const string& s){// 为空也不行if(s.empty()){return false;}int num;istringstream ss(s);ss >> num;// 0 <= num <= 255if(!(num >= 0 && num <= 255)){return false;}// 00 也不可以if(s.size() > 1 && s[0] == '0'){   return false;}return true;}vector<string> restoreIpAddresses(string s) {result.clear();if(s.size() < 4 || s.size() > 12){return result;}backtracking(s, 0, 0);return result;}
};

回溯pointNum用这个:backtracking(s, i+2, pointNum+1);

Method 2

class Solution {
public:vector<string> result; //void backtracking(string& s, int startIndex, int pointNum){int i;if(pointNum == 3){string temp1 = s.substr(startIndex, s.size()-startIndex);if(isValid(temp1)){result.push_back(s);}return;}for(i = startIndex; i < s.size(); i++){// 判断子区间[startIndex, i]是否合法ßstring temp2 = s.substr(startIndex, i-startIndex+1);if(isValid(temp2)){s.insert(s.begin()+i+1, '.'); //你为什么要加一个s.begin()pointNum++;backtracking(s, i+2, pointNum);pointNum--;s.erase(s.begin()+i+1);}// 不合法, 直接结束else{break;}}}// 使用 istringstreambool isValid(const string& s){// 为空也不行if(s.empty()){return false;}int num;istringstream ss(s);ss >> num;// 0 <= num <= 255if(!(num >= 0 && num <= 255)){return false;}// 00 也不可以if(s.size() > 1 && s[0] == '0'){   return false;}return true;}vector<string> restoreIpAddresses(string s) {result.clear();if(s.size() < 4 || s.size() > 12){return result;}backtracking(s, 0, 0);return result;}
};

回溯pointNum用这个:

pointNum++;
pointNum--;

Method 3

类似于C的写法,基础方法,求出string代表的int;

bool isValid(const string& s, int start, int end){int i = 0;int num = 0;// 一直喜欢用各种奇奇怪怪函数的carl怎么没借助C++专门的工具?if(start > end){return false;}// '0' 开头的数字不合法, 不包括数字'0'if(s[start] == '0' && start != end){return false;}for(i = start; i <= end; i++){// 遇到非数字字符不合法// if(!(s[i] >= 0 && s[i] <= 9))if(s[i] > '9' || s[i] < '0'){return false;}num = num * 10 + (s[i] - '0');// 如果大于255, 不合法if(num > 255){return false;}}return true;}

疑问

上述代码中使用了string.insert(s.begin()+i+1, '.')的方式来进行插入操作,而我随便搜索的教程里没有用迭代器s.begin()来表示插入位置的,都是直接用序号,比如string(i+1, "."),然而我这么写力扣反而报错了,很奇怪,很奇怪;

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

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

相关文章

Java中使用alibaba的easyexcel中的方法实现csv模板下载功能

系列文章目录 文章目录 系列文章目录一、EasyExcelUtil工具 一、EasyExcelUtil工具 /*** param response 响应* param fileName 文件名称* param sheetName sheet名称* param headNameList 头部名称* param <T>* throws IOException*/public static <T>…

基于Springboot+Vue的Java项目-车辆管理系统开发实战(附演示视频+源码+LW)

大家好&#xff01;我是程序员一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &am…

Spring自动装配:解析原理与实践

在Spring框架中&#xff0c;自动装配是一种强大的特性&#xff0c;它能够根据一定的规则自动地将bean装配到Spring容器中&#xff0c;从而简化了配置和开发过程。本文将深入探讨Spring自动装配的原理和实践&#xff0c;帮助程序员更好地理解和应用这一重要特性。 1. 什么是自动…

35个矩阵账号,如何通过小魔推打造2704万+视频曝光?

在如今的短视频时代&#xff0c;矩阵发布的作用被发挥到极致&#xff0c;通过各个短视频平台的流量分发&#xff0c;虽然视频质量不如那些头部的IP&#xff0c;但是在视频数量上却能做到轻松碾压&#xff0c;让自己的品牌与门店有更多的声量&#xff0c;这就是如今短视频平台对…

安卓实现视频录制与显示和翻转摄像头

权限&#xff1a; <!-- 相机权限 --> <uses-featureandroid:name"android.hardware.camera"android:required"false" /> <uses-permission android:name"android.permission.CAMERA" /><!-- 录音权限&#xff08;包括麦克…

2024好用的网页客服系统推荐?

2024好用的网页客服系统推荐&#xff1f;Zoho SalesIQ是一款强大的实时聊天工具&#xff0c;专为网站和在线商店设计。它提供了一套全面的功能&#xff0c;帮助企业实时解决客户问题&#xff0c;提高转化率和客户满意度。 实时监控 Zoho SalesIQ能够实时监控网站的访问者活动&…

能源系统升级BACnet IP分布式I/O边缘模块深度整合

能源管理系统(EMS)的高效运行成为了实现绿色建筑、节能减排的关键。而BACnet IP分布式远程I/O模块作为这一系统中的重要组件&#xff0c;正发挥着不可小觑的作用。本文将以某大型商业综合体为例&#xff0c;探讨BACnet IP I/O模块如何在能源管理中大显身手。 商业综合体涵盖办公…

波分系统中的EDFA光纤放大器

功能&#xff1a; 实现C波段光信号整体放大总波长范围覆盖1528~1565nm支持系统实现不同跨段的无电中继传亮点&#xff1a; 宽增益范围&#xff1a;1528nm~1565nm三种光放大器C波段应用&#xff1a; BA功率放大器LA线路放大器PA前置放大器 低噪声系数&#xff0c;典型值&#xf…

一文教你在windows上实现ollama+open webui、外网访问本地模型、ollama使用GPU加速

前言&#xff1a; ollama工具的出现让大语言模型的部署变得格外的轻松&#xff0c;但是在windows系统部署之后发现无法使用GPU进行加速&#xff0c;通过多方面查找资料发现可以在docker中使用命令启用GPU加速。另外通过Docker也可以快速部署open webui,于是本文基于docker实现…

cmake进阶:文件操作之写文件

一. 简介 cmake 提供了 file() 命令可对文件进行一系列操作&#xff0c;譬如读写文件、删除文件、文件重命名、拷贝文件、创建目录等等。 接下来 学习这个功能强大的 file() 命令。 本文学习 CMakeLists.txt语法中写文件操作。 二. cmake进阶&#xff1a;文件操作之写文件…

【活动】如何通过AI技术提升内容生产的效率与质量

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 如何通过AI技术提升内容生产的效率与质量引言一、自然语言处理&#xff08;NLP&…

预约咨询小程序源码搭建/部署/上线/运营/售后/更新

包含在线咨询、视频咨询、电话咨询、面询多种咨询方式&#xff0c;适用于心理、法律、宠物等预约咨询问诊场景 分类预览&#xff1a;小程序提供清晰的分类选项&#xff0c;使用户能够迅速找到所需的咨询服务类型&#xff0c;如法律咨询、心理咨询、医疗咨询等。预约时间选择&a…

HTML_CSS学习:定位

一、相对定位 相关代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>相对定位</title><style>.outer{width: 500px;background-color: #999ff0;border: 1px solid #000;p…

网线 网口 绿灯:链路连接,黄灯:数据信号 ——网络

正常情况&#xff1a;绿灯常亮&#xff0c;橙色常亮或闪烁。有信号传输时闪烁&#xff0c;没信号时常亮。 绿灯是链路指示&#xff08;即连接&#xff09;&#xff0c;黄灯是信号指示&#xff08;即传数据&#xff09; 一.分情况说明: 1.黄灯闪动,绿灯长亮:网线正常,正在通信中…

十四、网络编程

目录 一、网络编程概述二、网络通讯要素1、IP和端口号2、网络通信协议 三、IP和端口号四、网络协议1、网络通信协议2、TCP/IP协议簇1&#xff09;TCP协议2&#xff09;UDP 3、Socket 五、TCP网络编程1、基于Socket的TCP编程1&#xff09;客户端创建socket对象2&#xff09; 服务…

SQL运算符以及使用变量参与实际的查询(增删改)操作

#关系运算符&#xff08;<>!not&#xff09;与逻辑运算符&#xff08;&and|or&#xff09;set x7,y5;select x>y as TRUE,x<y as FALSE;#正确返回值true,实际返回值1&#xff0c;false0select xy;# 判断两个数值是否相等无需使用&#xff08;&#xff09;号&am…

HTML中插入图片(2024/5/10)

背景&#xff1a; 自己做了个小网站&#xff0c;想在网页的右下角贴上自己的微信二维码&#xff0c;用以下代码就可以了。 注意&#xff0c;这里是放右下角了&#xff0c;距离和二维码的图片大小需要自己去调整。 /*二维码的名字和路径需要自己修改*/ <!DOCTYPE html>…

C++初阶学习第六弹——string(1)——标准库中的string类

前言&#xff1a; 在前面&#xff0c;我们学习了C的类与对象&#xff0c;认识到了C与C语言的一些不同&#xff0c;今天&#xff0c;我们将进入C的 关键部分——STL&#xff0c;学习完这部分之后&#xff0c;我们就可以清楚的认识到C相比于C语言的快捷与便利 一、为什么有string…

获取文件夹下的vue文件形成组件,require.context

前言&#xff1a;项目中现有一个文件里面包含所有需要用到的组件&#xff0c;如果一个个的去import&#xff0c;则会非常麻烦&#xff0c;现有require.context去实现&#xff0c; 1、require.context var request require.context(‘./module’, true, /.js$/) require.cont…

AI编码工具-通义灵码功能实测(二)

AI编码工具-通义灵码功能实测&#xff08;二&#xff09; 通义灵码智能问答 在上一篇文章中&#xff1a;https://blog.csdn.net/csdn565973850/article/details/138563670?spm1001.2014.3001.5501 讲述了通义灵码的7大应用场景&#xff0c;这里在使用过程中遇到了一些问题&…