Генерация всех корректных IP‑адресов из последовательности цифр

Переберите длины первых трёх октетов от 1 до 3; четвёртый — оставшийся суффикс. Каждый октет должен иметь длину 1–3, значение ≤255 и не содержать ведущего нуля.

Короткий ответ

Что ответить на собеседовании

Переберите длины первых трёх октетов от 1 до 3; четвёртый — оставшийся суффикс. Каждый октет должен иметь длину 1–3, значение ≤255 и не содержать ведущего нуля.

Подробный разбор

Ответ с пояснениями

Условие

Дана строка s, состоящая исключительно из цифр. Необходимо получить список всех возможных валидных IP‑адресов, которые можно сформировать, разместив в строке три точки.

Порядок цифр сохраняется, перестановка запрещена. Каждый из четырёх октетов IP‑адреса должен быть числом в диапазоне от 0 до 255, записанным без ведущих нулей (за исключением самого нуля).

Пример 1 Ввод: "25525511135" Вывод: ["255.255.11.135", "255.255.111.35"]

Пример 2 Ввод: "0000" Вывод: ["0.0.0.0"]

Ответ

Переберите длины первых трёх октетов от 1 до 3; четвёртый — оставшийся суффикс. Каждый октет должен иметь длину 1–3, значение ≤255 и не содержать ведущего нуля.

static List<String> restoreIpAddresses(String s) {
    List<String> out = new ArrayList<>();
    if (s.length() < 4 || s.length() > 12) return out;
    for (int a = 1; a <= 3; a++)
        for (int b = 1; b <= 3; b++)
            for (int c = 1; c <= 3; c++) {
                int d = s.length() - a - b - c;
                if (d < 1 || d > 3) continue;
                String[] parts = {s.substring(0, a), s.substring(a, a+b),
                        s.substring(a+b, a+b+c), s.substring(a+b+c)};
                boolean valid = true;
                for (String part : parts)
                    if ((part.length() > 1 && part.charAt(0) == '0')
                            || Integer.parseInt(part) > 255) valid = false;
                if (valid) out.add(String.join(".", parts));
            }
    return out;
}

Импорты List/ArrayList из java.util. Условие гарантирует только цифры, поэтому parseInt безопасен для короткого октета. Проверяется не более 27 вариантов границ.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее