笔试面试题之SplitIp(出自网易)

各大公司公开了的笔试面试题练习之网易游戏2016“运营开发工程师”在线测评题splitIp解答;

全部代码下载:
Github链接:https://github.com/wpeace1212/Coder/tree/master/Code/netease
写文章不易,欢迎大家采我的文章,以及给出有用的评论,当然大家也可以关注一下我的github;多谢;

##题目2 : splitip
时间限制: 20000ms
单点时限: 1000ms
内存限制: 256MB

描述

粗心的小G把IPV4地址的点分隔符去掉了,每个ip地址只剩下数字,请你帮他还原出所有可能的IP字符串。

例如:

输入

25525511135

输出

255.255.11.135

255.255.111.35

输入

输入只有一行,内容为纯数字字符串。

输出

输出为多行。

每行一个点分隔的IPV4字符串。

多行以ASCII排序升序输出。

样例输入
25525511135

样例输出
255.255.11.135

255.255.111.35

2.我的理解:

Ip地址为四个字节,关键在于建立递归去遍历每一个字节满足的数。从第一个开始进行递归。

3.我的代码:


package com.netease.yunyin;



import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;



public class SplitIp {

    public static void main(String[] args) {

        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

        try {

            String input=br.readLine();

            String ip="";

            split(0, input.length(), input, ip);

        } catch (IOException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

    }

    //划分函数

   static void split(int start,int length,String input,String ip){

         //回溯时重新赋值

         String back=ip;

        for(int i=1;i<4&&(start+i)<=length;i++){

            //回溯

            ip=back;

            //判断每一字节是否符合规范

            String a=input.substring(start, start+i);

            if(isValidIp(a))

            {

                //符合规范加上

                ip+=a;

                //判断是否达到了四个字符:0.0.0.0

                String[] strings = ip.split("\\.");

                //输出

                if(strings.length==4&&(start+i)==length){System.out.println(ip);return;}

                //加上.号递归

                ip+=".";

                split(start+i, length,input, ip);

            }

        }

    }



   //判断是否为ip地址

   public static boolean isValidIp(String subIp) {

       //如果第一个字符为0,则一定为0

       if (subIp.charAt(0) == '0')

           return subIp.equals("0");

       //0<subIp<=255

       int num = Integer.parseInt(subIp);

       if (num <= 255 && num > 0)

           return true;

       else

           return false;

   }

}

/*//划分函数

static void split(int start,int length,String s,String ip){

         //回溯时重新赋值

         String back=ip;

    for(int i=1;i<4;i++){

        ip=back;

        //如果长度到了输入字符串的长度就可以输出了

        if((start+i)==length){

            //判断是否符合ip地址规范

            String a=s.substring(start, length);

            if(!isValidIp(a))return;

            //符合则加上

            ip+=a;

            String[] strings = ip.split("\\.");

            //判断是否达到了四个字符:0.0.0.0

            if(strings.length==4)System.out.println(ip);

            return;

        }else if((start+i)>length) return;

        String a=s.substring(start, start+i);

        if(!isValidIp(a))return;

        else{

            //接着递归

            ip+=a+".";

            String[] strings = ip.split("\\.");

            if(strings.length>=5){return;}

            split(start+i, length, s, ip);

        }

    }

 }*/

4.我的测试结果:

01

好的本章介绍到这里
来自伊豚wpeace(rlovep.com)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值