Соберите возрастающую часть 0...n, затем добавьте значения от n−1 до 0. Для n = 0 результат содержит единственный ноль.
Генератор последовательного массива
Соберите возрастающую часть 0...n, затем добавьте значения от n−1 до 0. Для n = 0 результат содержит единственный ноль.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Реализуйте функцию, принимающую целое число n и возвращающую массив, в котором сначала перечислены значения от 0 до n включительно, а затем те же значения в обратном порядке от n‑1 до 0.
Ответ
Соберите возрастающую часть 0...n, затем добавьте значения от n−1 до 0. Для n = 0 результат содержит единственный ноль.
func sequence(upTo n: Int) -> [Int]? {
guard n >= 0 else { return nil }
var result = Array(0...n)
if n > 0 {
for value in stride(from: n - 1, through: 0, by: -1) {
result.append(value)
}
}
return result
}
Для n = 3 получается [0, 1, 2, 3, 2, 1, 0]. Вершина n не дублируется. Длина результата математически равна 2n + 1, время и память O(n); для огромного n нужно ограничить объём или возвращать ленивую последовательность вместо массива.