🖥 Задача Восстановить IP

🖥 Задача Восстановить IP

https://t.me/+Qm9PbhU6Lf0h5wsm - machine learning

Сложность: Средняя

Условие задачи: Рабочий IP-адрес состоит ровно из четырех целых чисел, разделенных одиночными точками. Каждое целое число находится в диапазоне от 0 до 255 (включительно) и не может содержать начальных нулей.

Например, "0.1.2.201" и "192.168.1.1" являются допустимыми IP-адресами, но "0.011.255.245", "192.168.1.312" и "192.168@1.1 " являются недопустимыми IP-адресами.

Учитывая строку s, содержащую только цифры, верните все возможные действительные IP-адреса, которые могут быть сформированы путем вставки точек в s. Вам не разрешается изменять порядок или удалять какие-либо цифры в s. Вы можете вернуть действительные IP-адреса в любом порядке.

Пример:

Ввод: s = "25525511135"

Вывод: ["255.255.11.135","255.255.111.35"]


Ввод: s = "0000"

Вывод: ["0.0.0.0"]

func restoreIpAddresses(s string) []string { 
    res := []string{}

    for a := 1; a <= 3; a++ {
        for b := 1; b <= 3; b++ {
            for c := 1; c <= 3; c++ {

                d := len(s) - (a + b + c)
                if d > 0 && d <= 3 && a+b+c+d == len(s) {
                    A, _ := strconv.Atoi(s[:a])
                    B, _ := strconv.Atoi(s[a:a+b])
                    C, _ := strconv.Atoi(s[a+b:a+b+c])
                    D, _ := strconv.Atoi(s[a+b+c:])

                    if A <= 255 && B <= 255 && C <= 255 && D <= 255 {
                        addr := fmt.Sprintf("%d.%d.%d.%d", A, B, C, D)
                        
                        // To check if there was any leading zeros, 
                        // If leading zeros was there, then len will be reduced
                        // +3, for 3 '.'
                        if len(addr) == len(s) + 3 {
                            res = append(res, addr)
                        }
                    } 
                }
            }
        }
    }

    return res
}



Report Page