leetcode第一刷_Restore IP Addresses

leetcode第一刷_Restore IP Addresses

大家好,又见面了,我是全栈君。

字符串的问题真是难。一般递归比較好写代码,一般地归还会超时,并且測试用例特别多。。

这道题刚拿到手时直接慌了,这情况也太多了。后来冷静下来想想,事实上还是比較单纯的。

一个ip地址,肯定是四个整数加三个点构成,四个整数要满足什么呢,0~255嘛,还有呢,就是这四个整数必须正好把原来的字符串给用完。一開始忽略掉的一类測试用类是前面有0但实际这个数不是零的情况。

用什么来穷举呢,或者说穷举的对象是什么呢?当然是要插入的三个点的位置,数的有效范围非常小,因此穷举的范围也非常小,1~3个数位而已,代码一看。就明确是怎么回事了。我最開始的时候想着是把每个小数字用substr存起来,然后最后拼接,这种开销太大了,不建议。

bool isValide(string s, int start, int end){
    if(end - start > 3)
    	return false;
    if(s[start] == '0' && end-start>0)
    	return false;
    int res = 0;
    for(int i=start;i<=end;i++)
    	res = res*10+(s[i]-'0');
    if(res<0||res>255)
    	return false;
    return true;
}

class Solution {
public:
    vector<string> restoreIpAddresses(string s) {
        vector<string> res;
        int len = s.length();
        if(len<4)
            return res;
        string tp(len+3, '#');
        for(int i=0;i<3&&i<len-3;i++){
        	if(!isValide(s, 0, i))	continue;
        	//cout<<i<<" i"<<endl;
            for(int j=i+1;j<i+4&&j<len-2;j++){
            	if(!isValide(s, i+1, j))	continue;
            	//cout<<j<<" j"<<endl;
                for(int k=j+1;k<j+4&&k<len-1;k++){
                	//cout<<k<<" k"<<endl;
                	if(!(isValide(s, j+1, k)&&isValide(s, k+1, len-1)))
                		continue;
                	//cout<<"**"<<endl;
                	int index = 0, m = 0;
                	while(index<=i) tp[m++] = s[index++];
                	tp[m++] = '.';
                	while(index<=j) tp[m++] = s[index++];
                	tp[m++] = '.';
                	while(index<=k) tp[m++] = s[index++];
                	tp[m++] = '.';
                	while(index<len) tp[m++] = s[index++];
                	//cout<<tp<<endl;
                	res.push_back(tp);
				}
            }
        }
        return res;
    }
};

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115321.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JavaScript数组求和_js获取对象数组的第一个元素

    JavaScript数组求和_js获取对象数组的第一个元素您如何找到其元素的总和?好吧,解决方案是一个array.reduce()方法。Array.prototype.reduce()函数可用于遍历数组,将当前元素值添加到先前项目值的总和中。Javascript和数组要查找两个数字的Java和数组,请使用array.reduce()方法。reduce()方法将数组简化为单个值。reduce()函数为数组的每个值(从左到右)执行提供的函数。方法的返回值存储在累加器中(结果/总计)。句法array.reduce(function(total,cur

    2022年9月28日
    1
  • 腾讯云域名如何绑定ip地址

    腾讯云域名如何绑定ip地址域名解析的前提是首先要拥有一个域名 如何把你的域名绑定你的公网 ip 这就需要域名解析 云服务有提供云解析的功能 本文是通过腾讯云操作讲解如何绑定域名 官网域名绑定教程 腾讯云如何绑定域名 腾讯云域名如何绑定 ip 进入控制台 gt 总览 gt 云解析 2 这里需要做进一步的设置 比如 在更多选项卡中 开启 CNAME 加速 开启搜索引擎推送等 3 接着点击解析选项 进入添加记录的控

    2025年12月16日
    3
  • PhpSpreadsheet_php标准输入流stdin

    PhpSpreadsheet_php标准输入流stdin实例化对象composer导包”phpoffice/phpspreadsheet”:”^1.11″,$spreadsheet=newSpreadsheet();$sheet=$spreadsheet->getActiveSheet();合并单元格$sheet->mergeCells(‘A1:J1’);设置单元格的内容$spreadsheet->getActiveSheet()->setCellValue(‘A2′,’序号’)-&

    2025年12月13日
    2
  • gif录屏与gif图片合成工具「建议收藏」

    gif录屏与gif图片合成工具「建议收藏」现在好多gif图片合成是收费的,而且可能还不太好用,这里分析的gif合成软件是个比较老的软件,但是用着还是挺好用的。还有一个录屏软件,录制保存为gif文件。百度网盘分享,无需积分:链接:https://pan.baidu.com/s/1HukTW6yJvqoUiqbzXuY5bQ提取码:pvc4欢迎关注微信公众号,分享更多实用工具:…

    2025年11月21日
    3
  • sql 求交集_sql求差函数

    sql 求交集_sql求差函数start_num=5end_num=10(数据库值)startend(条件)四种情况://1、start=6end=8#{start}>=start_numand#{end}&lt;=end_num//2、start=4end=7#{effectiveDate}&lt;=effective_dateand(#{validDate}betweeneffective_dateandvalid_date)//3、

    2025年7月3日
    4
  • Duilib学习(一)

    #pragmaonce#includeusingnamespaceDuiLib;#ifdef_DEBUG#ifdef_UNICODE#pragmacomment(lib,&

    2021年12月18日
    96

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号