还原IP地址(力扣93)

news/2024/9/24 8:22:41/

解题思路;和分割回文数大致一样,都是在叶子节点收集结果,不过这里要多定义一个用来判断是否合格的函数,并且收集规则是插入完三个节点后再判断收集,同时注意每次开始时要在两位之后因为插入了.

具体代码如下:

class Solution {

public:

   vector<string>result;

    bool isVaild(const string&s,int start,int end){

        if(start>end){

            return false;

        }

        if(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) { // 如果大于255了不合法

            return false;

        }

    }  return true;

    }

    void travelBack(string &s,int startIndex,int pointSum){

        if(pointSum==3){

            if(isVaild(s,startIndex,s.size()-1)){

                result.push_back(s);

            }

            return ;

        }

        for(int i=startIndex;i<s.size()-1;i++){

            if(isVaild(s,startIndex,i)){

                s.insert(s.begin()+i+1,'.');

                pointSum++;

                travelBack(s,i+2,pointSum);

                s.erase(s.begin()+i+1);

                pointSum--;

            }

            else break;

        }

    }

    vector<string> restoreIpAddresses(string s) {

         travelBack(s,0,0);

         return result;

    }

};

题目如下:

有效 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 仅由数字组成

http://www.ppmy.cn/news/1456528.html

相关文章

Linux使用正斜杠(/)作为目录分隔符,Windows使用反斜杠(\)作为目录分隔符

Linux路径不使用反斜杠&#xff08;\&#xff09;作为目录分隔符&#xff0c;而是使用正斜杠&#xff08;/&#xff09;。在Linux系统中&#xff0c;文件路径是从根目录&#xff08;/&#xff09;开始&#xff0c;通过正斜杠&#xff08;/&#xff09;分隔各个目录和文件。例如…

HALPWM配置占空比频率2按键控制思路

title: HALPWM配置占空比频率 tags: STM32ClionHal 控制pwm开关 //启动定时器 HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim);//关闭定时器 HAL_StatusTypeDef HAL_TIM_Base_Stop(TIM_HandleTypeDef *htim);//启动指定通道PWM HAL_StatusTypeDef HAL_TIM_P…

TXT文本高效批量编辑,支持批量将每个单号间的空白行进行删除掉,文本内容管理更方便

TXT文本是一种常用的存储快递单号的数据格式。然而&#xff0c;当TXT文本中存在大量的空白行时&#xff0c;不仅浪费了存储空间&#xff0c;还可能导致批量编辑和查询变得低效。为了解决这一问题&#xff0c;我们推出了高效的TXT文本批量编辑功能&#xff0c;支持批量删除单号间…

RabbitMQ的介绍和使用

1.同步通讯和异步通讯 举个例子&#xff0c;同步通讯就像是在打电话&#xff0c;因此它时效性较强&#xff0c;可以立即得到结果&#xff0c;但如果你正在和一个MM打电话&#xff0c;其他MM找你的话&#xff0c;你们之间是不能进行消息的传递和响应的 异步通讯就像是微信&#…

905. 按奇偶排序数组

905. 按奇偶排序数组 题目链接&#xff1a;905. 按奇偶排序数组 代码如下&#xff1a; class Solution { public:vector<int> sortArrayByParity(vector<int>& nums) {vector<int> res;for(int i0;i<nums.size();i){if(nums[i]%20) res.push_ba…

高实时、高可靠的微内核操作系统——鸿道Intewell

近年来&#xff0c;我国不断推进工业转型升级&#xff0c;力求实现从传统工业大国向现代工业强国的跨越。想要在新一轮科技革命中“超车”&#xff0c;需要从多个维度进行深度布局和全面发力。 ——科技创新是核心驱动力 积极推动工业结构的优化和升级&#xff0c;通过发展新…

力扣数据库题库学习(5.6日)--1729. 求关注者的数量

1729. 求关注者的数量 问题链接 思路分析 编写解决方案&#xff0c;对于每一个用户&#xff0c;返回该用户的关注者数量。 按 user_id 的顺序返回结果表。示例 1&#xff1a;输入&#xff1a; Followers 表&#xff1a; ---------------------- | user_id | follower_id | -…

从哪些方面可以看出现货黄金价格走势?

现货黄金价格的走势受到多种因素的影响&#xff0c;我们可以从宏观经济环境、货币政策、供需关系、市场情绪和技术分析几个主要方面来观察和分析这一贵金属的价格动态。现货黄金作为全球投资市场中的避险资产&#xff0c;其价格波动往往能体现出复杂的经济和政治变化。 宏观经济…