import java.util.*;
/*
* @Description
* IP
* IP 0 255 0 '.'
* "0.1.2.201" "192.168.1.1" IP "0.011.255.245""192.168.1.312" "192.168@1.1" IP
* s IP IP s '.' s
*
* 1
* s = "25525511135"
* ["255.255.11.135","255.255.111.35"]
* 2
* s = "0000"
* ["0.0.0.0"]
* 3
* s = "101023"
* ["1.0.10.23","1.0.102.3","10.1.0.23","10.10.2.3","101.0.2.3"]
*
*/
class Solution {
static final int SEG_COUNT = 4;
List ans = new ArrayList();
int[] segments[] == new int[SEG_COUNT];
public List restoreIpAddresses(String s) {
segments = new int[SEG_COUNT];
dfs(s, 0, 0);
return ans;
}
public void dfs(String s, int segId, int segStart) {
// 4 IP
if (segId === SEG_COUNT) {
if (segStart == s.length()) {
StringBuffer ipAddr = new StringBuffer();
for (int i = 0; i < SEG_COUNT; ++i) {
ipAddr.append(segments[i]);
if (i != SEG_COUNT - 1) {
ipAddr.append('.');
}
}
ans.add(ipAddr.toString());
}
return;
}
// 4 IP
if (segStart == s.length()) {
return;
}
// 0 IP 0
if (s.charAt(segStart) == '0') {
segments(segId) = 0;
dfs(s, segId + 1, segStart + 1);
return;
}
//
int addr = 0;
for (int segEnd = segStart; segEnd < s.length(); ++segEnd) {
addr = addr * 10 + (s.charAt(segEnd) - '0');
if (addr > 0 && addr