各大公司公开了的笔试面试题练习之网易游戏2016“运营开发工程师”在线测评题splitIp解答;
全部代码下载:
Github链接:https://github.com/wpeace1212/Coder/tree/master/Code/netease
写文章不易,欢迎大家采我的文章,以及给出有用的评论,当然大家也可以关注一下我的github;多谢;
时间限制:
20000ms
单点时限:
1000ms
内存限制:
256MB
-
25525511135
样例输出
-
255.255.11.135 255.255.111.35
描述
粗心的小G把IPV4地址的点分隔符去掉了,每个ip地址只剩下数字,请你帮他还原出所有可能的IP字符串。
例如:
输入
25525511135
输出
255.255.11.135
255.255.111.35
输入
输入只有一行,内容为纯数字字符串。
输出
输出为多行。
每行一个点分隔的IPV4字符串。
多行以ASCII排序升序输出。
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.我的测试结果:
好的本章介绍到这里
来自伊豚wpeace(rlovep.com)