Матрицы
Двумерные данные как массив строк
Матрицу в алгоритмических задачах удобно представлять двумерным массивом. Первый индекс выбирает строку, второй — столбец.
int[][] matrix = {
{1, 2, 3},
{4, 5, 6}
};
int value = matrix[1][2]; // 6
Для такой матрицы matrix.length — количество строк,
а matrix[row].length — количество элементов в конкретной строке.
Это различие важно: в Java двумерный массив технически является массивом массивов,
поэтому длины строк могут отличаться.
Обход по строкам и столбцам
Полный обход матрицы обычно использует два вложенных цикла: внешний выбирает строку, внутренний проходит по её элементам.
int sum = 0;
for (int row = 0; row < matrix.length; row++) {
for (int col = 0; col < matrix[row].length; col++) {
sum += matrix[row][col];
}
}
Если матрица содержит rows строк и cols столбцов,
полный обход прямоугольной матрицы требует O(rows × cols) времени,
потому что посещается каждая ячейка.
Соседние ячейки и границы
Во многих задачах нужно смотреть на соседей текущей ячейки: сверху, снизу, слева или справа. Перед обращением к соседу необходимо проверить, что его координаты остаются внутри матрицы.
int row = 1;
int col = 1;
if (row > 0) {
int top = matrix[row - 1][col];
}
if (col + 1 < matrix[row].length) {
int right = matrix[row][col + 1];
}
Такие проверки кажутся мелочью, но именно корректная работа с координатами становится основой более сложных алгоритмов на таблицах и сетках.
matrix[row].length
для текущей строки.