Repository navigation
Expand file tree
/
Copy pathGenerateValidIP.java
More file actions
105 lines (95 loc) · 4.22 KB
/
Copy pathGenerateValidIP.java
File metadata and controls
105 lines (95 loc) · 4.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import java.util.LinkedList;
import java.util.Queue;
public class GenerateValidIP {
//Given a numeric string, generate all possible valid IP addresses by inserting dots.
// For example, given "25511156", possible valid outputs include:
//2.55.111.56
//255.11.1.56
//255.1.1.156
private static void generateValidIPAddress(String str){
// ip address ranges 0 to 256
// generate sub strings of size 1 to 3 and store in anothe list
Queue<RequestObject> queue = new LinkedList<>();
int length = str.length();
RequestObject requestObject = new RequestObject();
requestObject.str1 = str.substring(0,1);
requestObject.str2 = str.substring(1, length);
requestObject.response = "";
requestObject.resIpLen = 0;
requestObject.inputLength = length;
queue.add(requestObject);
RequestObject requestObject1 = new RequestObject();
requestObject1.str1 = str.substring(0,2);
requestObject1.str2 = str.substring(2, length);
requestObject1.response = "";
requestObject1.resIpLen = 0;
requestObject1.inputLength = length;
queue.add(requestObject1);
RequestObject requestObject2 = new RequestObject();
requestObject2.str1 = str.substring(0,3);
requestObject2.str2 = str.substring(3, length);
requestObject2.response = "";
requestObject2.resIpLen = 0;
requestObject2.inputLength = length;
queue.add(requestObject2);
findIpAddress(queue);
}
private static void findIpAddress (Queue<RequestObject> queue){
while (!queue.isEmpty()){
RequestObject requestObject = queue.poll();
int len = requestObject.str2.length();
if(Integer.parseInt(requestObject.str1) < 256 && requestObject.resIpLen < 4){
if(requestObject.response.isEmpty()){
requestObject.response = requestObject.str1;
} else {
requestObject.response = requestObject.response + "." + requestObject.str1;
}
requestObject.resIpLen = requestObject.resIpLen + 1;
}
processAndPrint(requestObject, requestObject.inputLength);
if(len >= 1){
RequestObject requestObject1 = new RequestObject();
requestObject1.str1 = requestObject.str2.substring(0,1);
requestObject1.str2 = requestObject.str2.substring(1, len);
requestObject1.response = requestObject.response;
requestObject1.resIpLen = requestObject.resIpLen;
requestObject1.inputLength = requestObject.inputLength;
queue.add(requestObject1);
}
if(len >= 2) {
RequestObject requestObject2 = new RequestObject();
requestObject2.str1 = requestObject.str2.substring(0,2);
requestObject2.str2 = requestObject.str2.substring(2, len);
requestObject2.response = requestObject.response;
requestObject2.resIpLen = requestObject.resIpLen;
requestObject2.inputLength = requestObject.inputLength;
queue.add(requestObject2);
}
if(len >= 3){
RequestObject requestObject3 = new RequestObject();
requestObject3.str1 = requestObject.str2.substring(0,3);
requestObject3.str2 = requestObject.str2.substring(3, len);
requestObject3.response = requestObject.response;
requestObject3.resIpLen = requestObject.resIpLen;
requestObject3.inputLength = requestObject.inputLength;
queue.add(requestObject3);
}
}
}
static class RequestObject{
String str1;
String str2;
String response = "";
Integer resIpLen = 0;
int inputLength;
}
private static void processAndPrint(RequestObject requestObject, int inputLength) {
if(requestObject.response.length() == inputLength + 3){
System.out.println(requestObject.response);
}
}
public static void main(String[] args) {
String input = "25511156";
generateValidIPAddress(input);
}
}