classSolution { public List<String> restoreIpAddresses(String s) { List<String> list = newLinkedList<>(); backtrack(s, list, newStringBuilder(), 0, 0); return list; }
privatevoidbacktrack(String s, List<String> list, StringBuilder sb, int index, int level) { if (level > 4) return; if (index == s.length() && level == 4) { list.add(sb.toString()); return; } for (inti=1; i <= 3; i++) { if (index + i > s.length()) break; intnum= Integer.valueOf(s.substring(index, index + i)); // Checking if num is 0~9 or 10~99 or 100 ~ 255 because leading 0s is invalid. if (i == 1 || i == 2 && num >= 10 && num <= 99 || i == 3 && num >= 100 && num <= 255) { sb.append(num); if (level < 3) sb.append("."); backtrack(s, list, sb, index + i, level + 1); if (level < 3) sb.deleteCharAt(sb.length() - 1); sb.delete(sb.length() - i, sb.length()); } } } }