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
|
import java.util.List;
class Solution {
public List<String> restoreIpAddresses(String s) {
//backtrack to solve it
// collect valid ip
List<String> validIps = new ArrayList<>();
//1. not valid string
if( s.length()< 4 || s.length()> 12 ){
return validIps;
}
int segament = 0;
String currentIPString = "";
int startIndex = 0;
backtrack(s, validIps, 0, currentIPString, segament);
return validIps;
}
// backtrack
public void backtrack(String s,List<String> validIps, int startIndex,
String currentIPString, int segament ){
// return condition
if(segament == 4 && startIndex == s.length()){
validIps.add(currentIPString);
return;
}
//trm
if(segament ==4 || startIndex == s.length()){
return;
}
// iterative current string from 1 to 3
for(int len = 1; len<=3; len++){
if(startIndex + len >s.length()){
break;
}
String segamentIP = s.substring(startIndex, startIndex+len);
if(validSegamentIP(segamentIP, len)){
String newcurrentIPString = segament == 0 ?
segamentIP : currentIPString + "." + segamentIP;
backtrack(s,validIps,startIndex+len, newcurrentIPString, segament+1);
}
}
}
//validSegamentIP
public boolean validSegamentIP(String segamentIP, int len){
// invalid SegamentIP 01 || 256 etc.
if((segamentIP.startsWith("0") && len > 1)
|| (!segamentIP.startsWith("0") && Integer.valueOf(segamentIP) > 255)){
return false;
}
return true;
}
}
|