🖥 Задача Восстановить 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
}