Индекс элемента определяет столбец, а строка идёт прямо для чётного столбца и в обратном порядке для нечётного.
Напишите функцию, преобразующую одномерный массив в матрицу заданного числа строк и столбцов: первый столбец заполняется сверху вниз, второй — снизу вверх, и так далее. Если размер матрицы не соответствует длине массива, нужно выбросить ошибку.
Индекс элемента определяет столбец, а строка идёт прямо для чётного столбца и в обратном порядке для нечётного.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Индекс элемента определяет столбец, а строка идёт прямо для чётного столбца и в обратном порядке для нечётного.
Здесь размеры должны быть положительными целыми:
function snakeMatrix(values, rows, cols) {
if (!Number.isInteger(rows) || !Number.isInteger(cols) || rows <= 0 || cols <= 0 ||
!Number.isSafeInteger(rows * cols) || rows * cols !== values.length) {
throw new RangeError('Invalid matrix dimensions');
}
const matrix = Array.from({ length: rows }, () => Array(cols));
for (let i = 0; i < values.length; i++) {
const col = Math.floor(i / rows);
const offset = i % rows;
const row = col % 2 === 0 ? offset : rows - 1 - offset;
matrix[row][col] = values[i];
}
return matrix;
}
Для [1,2,3,4,5,6], 2×3 результат [[1,4,5],[2,3,6]]. Время и память O(rows×cols), исходный массив не меняется.