首页 > 其他分享 >每日力扣打卡93.复原IP地址

每日力扣打卡93.复原IP地址

时间:2024-12-11 21:59:02浏览次数:5  
标签:break string 力扣 stoi IP地址 字符串 打卡 255

题目:

有效 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 中的任何数字。你可以按 任何 顺序返回答案。

示例 1:

输入:s = "25525511135"
输出:["255.255.11.135","255.255.111.35"]
示例 2:

输入:s = "0000"
输出:["0.0.0.0"]
示例 3:

输入:s = "101023"
输出:["1.0.10.23","1.0.102.3","10.1.0.23","10.10.2.3","101.0.2.3"]

提示:

1 <= s.length <= 20
s 仅由数字组成

解题思路:用三层for循环,每层循环通过string的函数s.substr(int pos,int count)从下标pos位置向后截取count个,这样截取到一个字符串,原字符串保持不变的,对该字符串先判断是否为‘0’开头,通过stoi()方法将字符串化为整形判断其是否大于255,若都符合条件记录该字符串,进行下一次循环,直至最后一层循环要判断两个字符串,一个是IP地址的第三个字符串,另一个是剩余数字组成的IP地址的第四个字符串。

注:for循环条件为1到3因为,IP地址每一个字符串长度为1到3。

解题代码为:

class Solution {
public:
    vector<string> restoreIpAddresses(string s) {
        int n=s.size();//记录字符串长度
        vector<string> vec;
        for(int i=1;i<=3;i++){
            string t1=s.substr(0,i);//截取IP地址的第一个字符串
            if(t1.size()>1&&t1[0]=='0'){//若其长度大于1时,需要判断其是否为0开头
                break;
            }
            if(stoi(t1)>255){//判断其化为整形时是否大于255
                break;
            }
            for(int j=1;j<=3;j++){
                if(i+j>=n){//因为IP地址除了第2个字符串,后面还有两所以需要进行一个长度判断
                    break;
                }
                string t2=s.substr(i,j);
                if(t2.size()>1&&t2[0]=='0'){
                    break;
                }
                if(stoi(t2)>255){
                    break;
                }
                for(int k=1;k<=3;k++){
                    if(i+j+k>=n){
                        break;
                    }
                    string t3=s.substr(i+j,k);
                    if(t3.size()>1&&t3[0]=='0'){
                        break;
                    }
                    if(stoi(t3)>255){
                        break;
                    }
                    string t4=s.substr(i+j+k,n-i-j-k);
                    if(t4.size()>1&&t4[0]=='0'){
                        continue;//IP地址最后一个字符串使用continue是因为第3个字符串可以改变其情况,不能直接break
                    }
                    if(t4.size()>3){//stoi 在遇到非常大的数字时可能会因为整数溢出而失败,所以对于剩余数字个数需要进行一个判断
                        continue;
                    }
                    if(stoi(t4)>255){
                        continue;
                    }
                    string temp=t1+"."+t2+"."+t3+"."+t4;
                    vec.push_back(temp);
                    }
            }
        }
        return vec;
    }
    
};

标签:break,string,力扣,stoi,IP地址,字符串,打卡,255
From: https://blog.csdn.net/2401_84164461/article/details/144411073

相关文章

  • Linux 连接 远程服务器的指定IP地址和端口号
    ‌Telnet命令用于连接远程服务器的指定IP地址和端口号,其基本格式如下‌:‌telnet[远程主机IP][端口号]例如,要连接到IP地址为192.168.1.100的设备,端口号为23(默认的Telnet端口号),命令如下:telnet192.168.1.10023Telnet命令的作用‌是提供远程登录服务,用户可以通过Telnet命......
  • 打卡信奥刷题(408)用C++信奥B3884[普及组/提高] [信息与未来 2015] 加数
    [信息与未来2015]加数题目描述给出一个正整数nnn,在nnn的右边......
  • 【计算机网络】IP地址及子网划分
    随着互联网技术的飞速发展,网络已经成为现代社会的基础设施。在这样一个高度互联的世界中,有效的IP地址管理变得至关重要。IP子网划分作为网络设计和优化的关键技术之一,对于确保网络的可扩展性、性能和安全性起着决定性作用。本文旨在深入探讨IP子网划分的原理和实践,帮助读者......
  • 力扣-图论-8【算法学习day.58】
    前言###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!习题1.引爆最多的炸弹题目链接:2101.引爆最多的炸弹-力扣(Le......
  • 力扣周赛427
    力扣周赛427......
  • Java学习打卡-Day8
    抽象类与接口抽象方法只有声明,没有具体的实现。必须用abstract关键字进行修饰。抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),默认情况下为public。抽象类包含抽象方法的类。只是用abstract修饰的话也是抽象类。可......
  • 20241209打卡
    UML:现代软件开发中的建模利器引言在现代软件开发过程中,随着系统复杂度的增加,如何高效地描述、设计和沟通系统架构变得尤为重要。统一建模语言(UnifiedModelingLanguage,UML)作为一种图形化建模语言,提供了一种标准化的方法来可视化、构建和记录软件系统的结构和行为。本文将围绕UM......
  • 考研打卡(40)
    开局(40)开始时间 2024-12-09 19:54:44结束时间 2024-12-09 20:38:32学了两个小时,感觉学不完了,怎么是这么多数据结构对于一棵具有n个节点、度为4的树来说_________(中国农业大学2013年)A树的高度至多是n-3B树的高度至多是n-4C第i层上至多有4*(i-1)个节点D至少在某......
  • 单词拼写纠正-04-161.力扣 相隔为 1 的编辑距离
    拼写纠正系列NLP中文拼写检测实现思路NLP中文拼写检测纠正算法整理NLP英文拼写算法,如果提升100W倍的性能?NLP中文拼写检测纠正Paperjava实现中英文拼写检查和错误纠正?可我只会写CRUD啊!一个提升英文单词拼写检测性能1000倍的算法?单词拼写纠正-03-leetcodeedit-d......
  • 力扣746 使用最小花费爬楼梯
    问题描述:给你一个整数数组cost,其中cost[i]是从楼梯第i个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。你可以选择从下标为0或下标为1的台阶开始爬楼梯。请你计算并返回达到楼梯顶部的最低花费。示例一:输入:cost=[10,15,20]输出:15......