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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 2019年常见的十个Python面试题

    Python学习网有大量免费的Python入门教程,欢迎大家来学习。本文主要给大家介绍10个面试过程中常见的Python面试题。

    2022年1月18日
    64
  • Java线程(五):Timer和TimerTask

    Timer和TimerTask可以做为实现线程的第三种方式,前两中方式分别是继承自Thread类和实现Runnable接口。Timer是一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行,可以看成一个定时器,可以调度TimerTask。TimerTask是一个抽象类,实现了Runnable接口,所以具备了多线程的能力。…

    2022年4月7日
    63
  • 数据结构:图(Graph)【详解】

    数据结构:图(Graph)【详解】图【知识框架】【考纲内容】图的基本概念图的存储及基本操作邻接矩阵法;邻接表法;邻接多重表;十字链表图的遍历深度优先搜索;广度优先搜索图的基本应用最小(代价)生成树;最短路径;拓扑排序;关键路径图的基本概念在线性表中,数据元素之间是被串起来的,仅有线性关系,每个数据元素只有一个直接前驱和一个直接后继。在树形结构中,数据元素之间有着明显的层次关系,并且每一层上的数据元素可能和下一层中多个元素相关,但只能和上一层中一个元素相关。图是一种较线性表和树更加复杂的数据结构。

    2022年6月28日
    27
  • HTML占位符_怎么使用占位符

    HTML占位符_怎么使用占位符HTML空格位占位符&amp;#32;——普通的英文半角空格;&amp;#160;、&amp;nbsp;、&amp;#xAO;、no-breakspace——普通的英文半角空格但不换行&amp;#160;——中文全角空格(一个中文宽度)&amp;#8194;、&amp;ensp——en空格(半个中文宽度)&amp;#8195;、&amp;emsp…

    2022年9月27日
    2
  • Android游戏引擎_2d游戏引擎

    Android游戏引擎_2d游戏引擎Android游戏引擎汇总1.AndEngine简介:AndEngine基于libGDX框架开发,使用OpenGLES进行图形绘制。同时继承了BOX2D物理引擎,因此能实现一些较为复杂的物理效果。在Rokon停止更新以后,AndEngine成为Android最为流行的2D游戏引擎优点:(1)高效:在大运算量好事情况下,使用C/C++本地代码进行开发。比如物理引擎或

    2022年9月19日
    2
  • 哈希表是哪一章节_哈希表的构造方法

    哈希表是哪一章节_哈希表的构造方法哈希表是个啥?小白:庆哥,什么是哈希表?这个哈希好熟悉,记得好像有HashMap和HashTable之类的吧,这是一样的嘛?????庆哥:这个哈希确实经常见????,足以说明它是个使用非常频繁的玩意儿,而且像你说的HashMap和HashTable之类的与哈希这个词肯定是有关系的,那哈希是个啥玩意啊,这个咱们还是得先来搞明白啥是个哈希表。????我们看看百科解释吧:散列表(Hashtable,也叫哈…

    2022年8月10日
    6

发表回复

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

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