class Solution {
public List<String> restoreIpAddresses(String s) {
List<String> res = new ArrayList<>();
if (s == null || s.length() == 0) {
return res;
}
StringBuilder sb = new StringBuilder();
helper(0, 0, sb, s, res);
return res;
}
private void helper(int digit, int count, StringBuilder sb, String s, List<String> res) {
if (digit > 4) {
return;
}
if (digit == 4) {
if (count == s.length()) {
res.add(sb.toString());
return;
} else {
return;
}
}
for (int i = 1; i <= 3; i++) {
if (count + i > s.length()) {
break;
}
String sub = s.substring(count, count + i);
if (i != 1 && sub.charAt(0) == '0') {
break;
}
if (i == 3 && Integer.parseInt(sub) > 255) {
break;
}
int length = sb.length();
sb.append(sub);
if (digit != 3) {
sb.append(".");
}
helper(digit + 1, count + i, sb, s, res);
sb.setLength(length);
}
}
}